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
して停止します。なんで?
floating point
なぜなら、それは決して==を達成しないからです。integer
あなたができること:
for($i=0;$i<=20;$i+=1){
echo ($i/10)."<br>";
}
浮動小数点の精度が原因で、これは機能しません。数値は基数2の形式で格納され、丸めのために正確になることはありません。.1を1.9に追加しても、2.0になることはありません。最終的には1.99999のようになります。次の反復では、ベース2形式での丸めに応じて、2.099998のような結果になります。
詳細については、浮動小数点数と 倍精度浮動小数点形式を参照してください。
あなたはまた、あなたが求めている結果を得るためにこのようなことをすることができます
for ($i = 0; $i < 2.1; $i += .1){
echo $i . '<br />';
}