如何解决PHP在会计中将长浮点四舍五入到两位小数
假设您有这个数字562.9444445
,并且想将其四舍五入到小数点后两位。现在,我要说的结果是562.95
,因为5是从尾部抬起的。不?
嗯,PHP round function不能那样工作。它将只检查下一个数字,在本例中为第三个数字,并返回562.94
。
我尝试使用$mode
参数的所有常量值,但没有一个返回正确的结果。
我很想知道是否有人遇到过这种情况,以及是否可以使用更精确的舍入函数。
我找到了this comment that can be useful,但我认为/希望可能还有其他东西。
<?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,3,PHP_ROUND_HALF_UP) . "<br>");
echo ("<hr>");
echo(round($value,PHP_ROUND_HALF_DOWN) . "<br>");
echo(round($value,PHP_ROUND_HALF_DOWN) . "<br>");
echo ("<hr>");
echo(round($value,PHP_ROUND_HALF_EVEN) . "<br>");
echo(round($value,PHP_ROUND_HALF_EVEN) . "<br>");
echo ("<hr>");
echo(round($value,PHP_ROUND_HALF_ODD) . "<br>");
echo(round($value,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。