我试图理解在 PHP 中从 float 转换为 int ,并遇到以下代码:
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
我的问题是为什么它回显 7 而不是 8?其背后的逻辑是什么?
我试图理解在 PHP 中从 float 转换为 int ,并遇到以下代码:
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
我的问题是为什么它回显 7 而不是 8?其背后的逻辑是什么?
这里:
$var = (int) $othervar;
我猜:
$var = int($othervar);
也可以。但事实并非如此!
gettype()
会告诉你类型,get_class()
会告诉你对象的类,两者都返回字符串,get_class()
如果没有提供参数或 null 则返回当前类,如果你提供非对象给get_class()
它是某种错误。
这些函数是 php 有多糟糕的一个例子,gettype()
而且get_class()
,有趣的事实是,因为你必须玩“猜测哪个有下划线”,你也有is_a()
(函数、期望$var
和“类型名”)和instanceof
(运算符)。
相反,它是:
$var = intval($othervar);
还有floatval
,整个地段都有 val 追随他们!更多的 PHP 愚蠢。
注意:
$var = (string) $othervar;
调用$othervar's __toString()
方法,但没有__toInt()
方法,只有字符串。
希望这可以帮助。
附录:
整数总是被截断,因此是 7。
其他附录:
如果您想要更多受控的转换,您可以使用 round() ,它可以按预期工作,floor()
(向下舍入,因此 7 减去 x 8 层到 7,-3 减去 x 减去 2 层到 -3)并且ceil()
向上舍入(减少 7 x 减少 8 ceils 到 8,减少 -3 x 减少 -2 ceils 到 -2)
这个问题是一个几乎完全相同的副本:
为什么 PHP 会将 (int) ((0.1+0.7)*10) 的结果转换为 7,而不是 8?
甚至是例子!
因为存储在内存中的实际值类似于 7.999999999999999999999999 ,这是由舍入误差引起的。
你也可以使用intval()
$float = 7.99999999999999999999999999999999;
$int = intval($float);
echo $int;