使用PHP的round()函数中的PHP 5.3.4可能的错误
除非我误解了round()函数在PHP中的工作方式,否则我认为它存在一个错误:
例:
运行:
$prod = 201.6 * 0.000275;
echo "No Round..: " . $prod;
echo "With Round: " . round($prod, 2, PHP_ROUND_HALF_DOWN);
PHP返回:
No Round..: 0.05544
With Round: 0.06
我期望的是:
结合Round,我预计结果为0.05。 这是预期的结果吗?
环境:
使用Apache 2.2.17在Windows 7 64位上运行的PHP 5.3.4。
很多。
这是正确的预期结果。
PHP_ROUND_HALF_DOWN
仅在值为一半时发挥作用,对于您的情况将为0.055。
超过0.055的任何东西,例如。 0.0550000001,会导致0.06。
如果你喜欢往下看,你应该尝试floor()
。
<?php
$prod = 201.6 * 0.000275;
$prod = floor($prod * 100)/100;
echo $prod; // gives 0.05
这是因为PHP不会跟踪溢出。
例如,也尝试
print (int) ((0.1 + 0.7) * 10);
你会期望表达式返回8,但打印7 。 发生这种情况是因为简单算术表达式的结果内部存储为7.999999,而不是8 ,当PHP将数字转换为int时,它只是简单地截断小数部分。 这意味着12.5%的错误!
如果您需要精确计算,请使用BCMath扩展。
查看“PHP基础知识”一章中的Zend PHP 5认证学习指南(php | architect)。
链接地址: http://www.djcxy.com/p/57745.html