我有一个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。
答案 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,那么在第二位置递增一位。