5
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并停止。为什么?

4

3 回答 3

5

因为,它永远不会实现floating point==integer

于 2012-05-12T03:58:36.280 回答
0

你可以这样做:

for($i=0;$i<=20;$i+=1){
    echo  ($i/10)."<br>";
}
于 2012-05-12T04:05:40.097 回答
0

由于浮点精度,这不起作用。这些数字以 base 2 格式存储,并且由于四舍五入而永远不会精确。当您将 0.1 添加到 1.9 时,您最终不会得到 2.0。你最终得到像 1.99999 这样的东西。在下一次迭代中,您最终会得到类似 2.099998 的内容,具体取决于它以 base 2 格式四舍五入的内容。

有关详细信息,请参阅浮点数双精度浮点格式

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

for ($i = 0; $i < 2.1; $i += .1){
    echo  $i . '<br />';
}
于 2012-05-12T04:05:53.797 回答