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形式で何を丸めるかによって、2.099998のようなものになります。詳細については
はまた、あなたは、
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後にそれをクリーンアップするためのおかげである結果を得るために、このような何かを行うことができFloating point numbersと Double-precision floating-point format
を参照してください。あなたはこの質問をもっと読みやすく、救済できるものにしました。質問に+1してください!おそらく、私たちは間違いなくそれを回す力を持っているので、それを投票する前に、より詳細に質問を見るべきでしょう。 – jmort253