PHP round()返回意外值

时间:2014-07-07 08:41:05

标签: php math rounding

我有一个2.6647的双精度值,我试图将数学上的正确值舍入为2位小数。

我期待返回值为2.67。

7(最后一个小数位)应该是第4轮(倒数第二个小数位)到5,5应该是第6轮(倒数第三个小数位)到7个。

$value = 2.6647;
echo round( $value, 2, PHP_ROUND_HALF_UP );

但我收到2.66。为什么会这样?

PHP版本是5.3.28。

4 个答案:

答案 0 :(得分:2)

  

47< 50

因此无论最后一个参数如何,2.6647都将四舍五入为2.66。

答案 1 :(得分:1)

舍入到n小数由n+1小数驱动。在这种情况下,第三个十进制数为4,因此数字向下舍入为2.66

答案 2 :(得分:0)

您误解了round()的工作原理:

“7(最后一个小数位)应该是第4轮(倒数第二个小数位)到5,5应该是第6轮(第三个小数位)到7个。”

这是不正确的。

round()仅考虑指定小数位后面的数字。所以在这种情况下,根本不考虑7。仅考虑4,小于5,确定该数字四舍五入为2.66。

要获得上面引用中指定的逻辑,您需要执行以下操作:

$value = 2.6647;
$value2 = round( $value, 3, PHP_ROUND_HALF_UP ); // 2.665
echo round( $value2, 2, PHP_ROUND_HALF_UP ); // 2.67

这可能不是一种非常可行的做事方式,但应该更好地了解round()的工作方式。

答案 3 :(得分:0)

请看一下..

回合功能

echo round(2.6647, 2);  // 2.66
echo round(2.6637, 2);  // 2.66
echo round(2.6657, 2);  // 2.67
echo round(2.6667, 2);  // 2.67

如果小数点后三位是5或大于5,那么在第二位置递增一位。