重複の可能性:
10進数を2進数で正確に表すことができないのはなぜですか?
浮動値の問題
$var1 = 1;
for ( $i=0; $i<30; $i++ ) {
$var1 += 0.1;
$var2 = floor($var1);
$var3 = $var1-$var2;
if ( $var3 == 0.5 ) {
$var1 = $var2+1;
}
}
このループの目的は、1.0、1.1、1.2、1.3、1.4をカウントしてから、2.0、2.1、2.2などにジャンプすることです。
私が得ている問題は、そのif
声明が決して真実ではないということです。また、10回ごとの計算は、いくつかの非常識な科学的答えに解決されます。
これを修正するにはどうすればよいですか?助けてください!
編集:私は少しイライラしたラッシュで質問を書きました、そしてそれは複数でした、私は今それを見ます。
質問の最初の部分は、実際には「この浮動小数点クエルクをバイパスしてこの作業を行うにはどうすればよいか」と「なぜこのクエルクが発生するのか」でした。
素晴らしい返信をありがとうございました。「これを機能させる方法」という主要な質問に簡単に答えられる正解に投票します。
0.5の代わりに0.49を使用し、==の代わりに>を使用します。原油であり、世界で最高のコードではありませんが、元の質問を解決します。コーディングを改善するために読んでフォローアップする他の回答をありがとうございました。
もう一度、どうもありがとう。