Round函数在php 5.1.6版本中无法正常工作


Round function not working properly in php version 5.1.6

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失败的原因

  1. 建议您应该使用更新版本的php

  2. 实际上,这是php5.1中的一个错误,后来被修复了。https://bugs.php.net/bug.php?id=34599

  3. 你仍然想要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);