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
和停止。爲什麼?
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
和停止。爲什麼?
這並不是由於浮點精度工作。這些數字以基礎2格式存儲,並且由於四捨五入而不準確。當你將.1加到1.9時,你最終不會得到2.0。你最終得到像1.99999這樣的東西。在下一次迭代中,您最終會得到類似2.099998的內容,具體取決於基礎2格式的內容。
欲瞭解更多信息,請參閱Floating point numbers和 Double-precision floating-point format
你也可以做這樣的東西,得到的結果你是後
for ($i = 0; $i < 2.1; $i += .1){
echo $i . '<br />';
}
這就是我所謂的貧民窟。 – Strawberry
問題是「爲什麼它不起作用」,所以除了代碼之外,關於浮點數的一些解釋會讓你得票。 – Spudley
謝謝,現在我明白了! – Jelly
你可以通過:
for($i=0;$i<=20;$i+=1){
echo ($i/10)."<br>";
}
@Brad,由於用於清潔起來。你讓這個問題更具可讀性和可挽救性。 +1的問題!也許我們應該在投票之前更仔細地看一個問題,因爲我們絕對有能力扭轉這個問題。 – jmort253