我试图理解在PHP中从float转换为int,并遇到以下代码:
echo (int) ( (0.1+0.7) * 10 ); // echoes 7!
我的问题是为什么它回应7而不是8?它背后的逻辑是什么?
答案 0 :(得分:1)
这里:
$var = (int) $othervar;
我猜:
$var = int($othervar);
也会奏效。但它没有!
gettype()
会告诉你类型,get_class()
将告诉你一个对象的类,两个返回字符串,get_class()
如果没有提供参数或null,则返回当前类,如果你向get_class()
提供了一个非对象,这是一种错误。
这些函数是php,gettype()
和get_class()
多么糟糕的一个例子,有趣的事实,因为你必须玩“猜有哪个有下划线”你也有is_a()
(函数) ,期望$var
和“typename”)和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个细胞到8,3减少x减去-2细胞到-2)
这个问题几乎完全是:
Why would on earth PHP convert the result of (int) ((0.1+0.7)*10) to 7, not 8?
即便如此!
答案 1 :(得分:0)
因为存储在内存中的实际值类似于7.999999999999999999999999,这是由舍入误差引起的。
答案 2 :(得分:0)
您也可以使用intval()
$float = 7.99999999999999999999999999999999;
$int = intval($float);
echo $int;