PHP 5.3.4使用PHP_round_HALF_DOWN模式的round()函数中可能存在的错误
除非我误解了round()函数在PHP中的工作原理,否则我认为它有一个bug: 例如: 运行:PHP 5.3.4使用PHP_round_HALF_DOWN模式的round()函数中可能存在的错误,php,rounding,Php,Rounding,除非我误解了round()函数在PHP中的工作原理,否则我认为它有一个bug: 例如: 运行: $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 我的期望: 对于圆形,我预计结果为0.05。这是预期的结果吗 环境
$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
我的期望:对于圆形,我预计结果为0.05。这是预期的结果吗 环境:
PHP5.3.4在64位Windows 7上运行,带有Apache 2.2.17
这是正确的预期结果
PHP\u ROUND\u HALF\u DOWN
仅当值正好为一半时才起作用,对于您的情况,该值为0.055
任何大于0.055的值,例如0.0550000001,将导致0.06
如果您喜欢四舍五入,您应该尝试floor()
这是因为PHP不跟踪溢出 例如,也可以尝试
print (int) ((0.1 + 0.7) * 10);
您可能希望表达式返回8,但会打印7。
这是因为简单算术表达式的结果在内部存储为7.999999,而不是8,当PHP将数字强制转换为int时,它只是截断小数部分。这意味着有12.5%的错误
如果需要精确计算,请使用扩展
查看“PHP基础”一章中的Zend PHP 5认证研究指南(PHP | architect)。关于浮点数,你是对的,但这不是问题所在:看看uzyns的解释,看看为什么结果是正确的,用户1544649不理解
round
的工作原理。
print (int) ((0.1 + 0.7) * 10);