使用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

上一篇: PHP 5.3.4 possible bug in round() function using PHP

下一篇: errorno(), but cURL is installed and works