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
如果您在第3次登记,例如汇总值不正确,则必须是7111。 在第一和第三,例如,唯一的区别是值的排列。
请建议为什么第3个例如给出失败
答案 0 :(得分:1)
建议你应该使用较新版本的php
实际上它是php 5.1中的一个错误,后来修复了。 https://bugs.php.net/bug.php?id=34599
仍然需要5.1
中的确切结果 round($c, 0, PHP_ROUND_HALF_UP);
它可能会帮助您解决问题,
答案 1 :(得分:0)
无法访问此版本的PHP。对于这种情况的最佳解决方案是升级到一些较新版本 - 毕竟PHP 7刚刚发布。
如果无法升级,可以尝试以下解决方法之一:
铸造(浮动)总和中的每个数字
转换为(浮动)结果 - (float) $c
转换为(字符串)然后转换为(浮动)结果 - (float)(string) $c
不知道是否有任何帮助,但如果您只需要一个解决方法,值得一试。不幸的是,除了猜测这个问题可能与PHP处理变量和数字的一些基本方法有关外,我无法解释为什么在你的情况下舍入不起作用。
这里有关于PHP Bugs Tracker的类似问题:https://bugs.php.net/bug.php?id=36008
答案 2 :(得分:0)
此问题的可能解决方案可以是使用round和number_format组合。
Ex:$ amount = round(number_format($ amount,8,“。”,“”),2);