PHP在会计中将长浮点值四舍五入到两位小数



假设您有这个数字562.9444445,并且您想将它四舍五入到2位小数。现在我想说,结果将是562.95,因为5是从尾部向上进位的。不

嗯,PHP round函数并不是这样工作的。它只会检查下一个数字,在这种情况下是第3位,然后返回562.94

我已经尝试过$mode参数的所有常数值,但没有一个返回正确的结果。

我很想知道是否有人遇到过这种情况,是否有更精确的舍入函数可以使用。

我发现这个评论可能很有用,但我认为/希望可能存在其他东西。

演示

<?php
$value = 562.9445;
echo round($value,1)."n"; // return 562.9 (correctly)
echo round($value,2)."n"; // return 562.94 (wrong)
echo round($value,3)."n"; // return 562.945 (correctly)

您可以使用此函数

<?php
function round_up ( $value, $precision ) { 
$pow = pow ( 10, $precision ); 
return ( ceil ( $pow * $value ) + ceil ( $pow * $value - ceil ( $pow * $value ) ) ) / $pow; 
} 
$value = 562.9445;
echo round_up ($value,1)."n"; // return 563  
echo round_up ($value,2)."n"; // return 562.95 
echo round_up ($value,3)."n"; // return 562.945

如果你需要使用圆形功能,有一些选项对你来说不合适:

<!DOCTYPE html>
<html>
<body>
<?php
$value = 562.9445;
echo(round($value,1,PHP_ROUND_HALF_UP) . "<br>");
echo(round($value ,2,PHP_ROUND_HALF_UP) . "<br>");
echo(round($value ,3,PHP_ROUND_HALF_UP) . "<br>");
echo ("<hr>");
echo(round($value ,1,PHP_ROUND_HALF_DOWN) . "<br>");
echo(round($value ,2,PHP_ROUND_HALF_DOWN) . "<br>");
echo(round($value ,3,PHP_ROUND_HALF_DOWN) . "<br>");
echo ("<hr>");
echo(round($value ,1,PHP_ROUND_HALF_EVEN) . "<br>");
echo(round($value ,2,PHP_ROUND_HALF_EVEN) . "<br>");
echo(round($value ,3,PHP_ROUND_HALF_EVEN) . "<br>");
echo ("<hr>");
echo(round($value ,1,PHP_ROUND_HALF_ODD) . "<br>");
echo(round($value ,2,PHP_ROUND_HALF_ODD) . "<br>");
echo(round($value ,3,PHP_ROUND_HALF_ODD));
?>
</body>
</html>

输出:

562.9
562.94
562.945
562.9
562.94
562.944
562.9
562.94
562.944
562.9
562.94
562.945

最新更新