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

浮動小数点の精度が原因で、これは機能しません。数値は基数2の形式で格納され、丸めのために正確になることはありません。.1を1.9に追加しても、2.0になることはありません。最終的には1.99999のようになります。次の反復では、ベース2形式での丸めに応じて、2.099998のような結果になります。

詳細については、浮動小数点数倍精度浮動小数点形式を参照してください。

あなたはまた、あなたが求めている結果を得るためにこのようなことをすることができます

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