Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP 5.3.4使用PHP_round_HALF_DOWN模式的round()函数中可能存在的错误_Php_Rounding - Fatal编程技术网

PHP 5.3.4使用PHP_round_HALF_DOWN模式的round()函数中可能存在的错误

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。这是预期的结果吗 环境

除非我误解了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。这是预期的结果吗

环境:
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);