PHP循环行为

时间:2012-10-16 13:48:14

标签: php floating-point rounding

$r = 302 / 490;
printLn($r);
printLn(round($r, 2, PHP_ROUND_HALF_UP));

给出

  

0.61632653061224484947189239392173476517200469970703125   0.61999999999999999555910790149937383830547332763671875

为什么不能正常舍入到真正的2位?

2 个答案:

答案 0 :(得分:2)

在可测量的浮点数精度范围内,显示的舍入数字为0.62。要理解为什么没有准确0.62,您需要了解浮点数的工作原理。基本上你可以取任何大小为2 53 -1的整数,并乘以-1074和971(含)之间的任何2的幂。 0.62无法以这种方式准确表示。

换句话说,您的precision INI设置过高。见this codepad。尝试将其设置为更具代表性的数字,例如默认值15。

答案 1 :(得分:0)

我使用打印代替 printLn 尝试了您的代码,这就是我所得到的:

0.61632653061224
0.62

您是否可以尝试使用print而不是printLn修改代码(这是Java打印)?