为什么这个for循环在达到预期值之前停止?

时间:2012-05-12 03:52:23

标签: php loops for-loop

for($i=0;$i<=2;$i+=0.1){
    echo  $i."<br>";
}

我希望的结果是:

0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2

相反,循环达到1.9并停止。为什么呢?

3 个答案:

答案 0 :(得分:5)

因为,它永远不会达到floating point == integer

答案 1 :(得分:0)

你可以做:

for($i=0;$i<=20;$i+=1){
    echo  ($i/10)."<br>";
}

答案 2 :(得分:0)

由于浮点精度,这不起作用。这些数字以基数2格式存储,由于四舍五入,因此从不精确。当你将.1添加到1.9时,你最终不会得到2.0。你最终得到了像1.99999这样的东西。在下一次迭代中,你最终会得到像2.099998这样的东西,这取决于它在基础2格式中的变化。

有关详细信息,请参阅Floating point numbersDouble-precision floating-point format

你也可以做这样的事情来获得你想要的结果

for ($i = 0; $i < 2.1; $i += .1){
    echo  $i . '<br />';
}