1)
$b = 468.7+468.7+468.7+468.7+468.7+468.7+468.7+175+175+175+175+175+175+175+175+175+175+175+175+175+175+689.8+689.8+0+0+0;
echo "<br><======>".$b;//gives 7110.5
echo "<br><======>".round($b);//gives 7111
2)
$k = 7110.5;
echo "<br><======>".$k; // gives 7110.5
echo "<br><======>".round($k);//gives 7111
3)
$c = 175+468.7+175+689.8+175+468.7+175+468.7+175+689.8+175+175+468.7+175+175+175+468.7+175+175+175+468.7+175+468.7;
echo "<br><======>".$c; // gives 7110.5
echo "<br><======>".round($c); // gives 7110
如果你在第三个例子中检查,四舍五入值不正确,它必须是7111。在第一和第三个例子中,唯一的区别是数值的排列。
请说明给定的第三个eg失败的原因
-
建议您应该使用更新版本的php
-
实际上,这是php5.1中的一个错误,后来被修复了。https://bugs.php.net/bug.php?id=34599
-
你仍然想要5.1 中的确切结果
round($c, 0, PHP_ROUND_HALF_UP);
它可能对您解决问题有效,
无法访问此版本的PHP。对于这种情况,最好的解决方案是升级到新版本——毕竟PHP 7刚刚发布。
如果无法升级,可以尝试以下解决方法之一:铸造到(浮动)您的总和中的每个数字
铸造到(浮动)结果-(float) $c
转换为(字符串),然后转换为(浮点)结果-(float)(string) $c
不知道其中是否有帮助,但如果你只需要一个变通方法,那么值得一试。不幸的是,除了猜测这个问题可能与PHP处理变量和数字的一些基本方式有关之外,我无法解释为什么在您的情况下四舍五入不起作用。
PHP Bugs Tracker上也提到了类似的问题:https://bugs.php.net/bug.php?id=36008
此问题的可能解决方案可以组合使用round和number_format。
例如:$amount=round(number_format($amount,8,".","),2);