2016-10-08 31 views
1

我真的很想知道,为什么下面的代码总是返回7.我真的很困惑。为什么这些表达式总是返回7?

$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

输出测试:

echo ($a == $b && $a == $c); //Output: true 
+0

看到http://stackoverflow.com/questions/3726721/php-floating-number-precision – jeroen

回答

4
$a = (double) ((0.1 + 0.6) * 10); //Output: 7 
$b = (int) ((0.1 + 0.6) * 10); //Output: 7 
$c = (int) ((0.1 + 0.7) * 10); //Output: 7 

理论上(0.1 + 0.7) * 10部分应该评估至8不7.

在脚本中的第三表达的输出的计算结果为7,因为PHP引擎将内部表达式的值存储为7.999999而不是7.

当小数值转换为整数时,PHP引擎会简单地截断小数部分。

+0

谢谢!我想,我在阅读过几次之后就明白了... –