可能重复:
PHP unexpected result of float to int type cast
int((0.1+0.7)*10) = 7 in several languages. How to prevent this?
有人能解释一下吗???
<?php
echo (int) ((0.1 + 0.7)*10);//displays an output: `7`
?>
我希望看到8
,但我得到了7
- 请解释一下这种行为。
这是PHP
的特殊功能吗?或者我不理解PHP
中的整数类型?
感谢。
答案 0 :(得分:0)
php manual中的这个问题:
此外,有理数的数字可以完全表示为 基数10中的浮点数,如0.1或0.7,没有 精确表示为基数2中的浮点数,即 内部使用,无论尾数的大小。因此,他们 没有a就无法转换成它们的内部二进制对应物 精度损失小。这可能导致令人困惑的结果:for 例如,floor((0.1 + 0.7)* 10)通常会返回7而不是 预期8,因为内部表示将是类似的 7.9999999999999991118 ....