10 進法 0.0100 1100 1100 1100 ...
0.4 0.0110 0110 0110 0110 ...
0.5 0.1
0.6 0.1001 1001 1001 1001...
たとえば、 .1、プログラム実際には「1.1」を表すことはできませんが、ある程度の精度しか達成できません。これは避けられない精度の損失:
1.09999999999999999
JavaScript では問題はさらに複雑です。ここでは Chrome でのテスト データをいくつか示します。
1.0-0.9 == 0.1 False
1.0-0.8 == 0.2 False
1.0-0.6 == 0.4 True
1.0- 0.5 == 0.5 真
1.0-0.4 == 0.6 真
1.0-0.3 == 0.7 真
1.0-0.2 == 0.8 真
1.0-0.1 == 0.9 真
解
では、1.0-0.9 != 0.1 でこのようなバグ以外の問題を回避するにはどうすればよいでしょうか?以下は一般的に使用される解決策です。精度削減プロセスは常に自動的に丸められるため、浮動小数点演算の結果を判断する前に計算結果の精度が削減されます。 code
コードは次のとおりです: