1

I can't find the reson for the following out put from for loop.

for loop

for($i=5; $i>0; $i=$i-.1){
echo $i.'<br>';
}

result is,

5
4.9
4.8
4.7
4.6
4.5
4.4
4.3
4.2
4.1
4
3.9
3.8
3.7
3.6
3.5
3.4
3.3
3.2
3.1
3
2.9
2.8
2.7
2.6
2.5
2.4
2.3
2.2
2.1
2
1.9
1.8
1.7
1.6
1.5
1.4
1.3
1.2
1.1
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
1.0269562977783E-15

why does it print 1.0269562977783E-15? For me it should be quite before 0 that is after .1

4

2 回答 2

6

首先,0.1它是二进制浮点的最大敌人,因为没有准确的方法来表示它。有很多小数点数不能用二进制浮点数准确表示。在这种情况下,您可以将循环调整为

for($i = 50; $i > 0; $i = $i - 1){
  echo $i / 10.0 . '<br>';
}
于 2013-06-13T16:52:50.223 回答
1

这与floating point precisionPHP 中的有关,但我不知道在最后一次迭代中导致这个确切结果的原因。

不过,如果您想正确显示输出:

printf('%f', $i);
于 2013-06-13T17:10:23.460 回答