请看下面的代码
double a = 0.001;
double b = 13.456;
System.out.println(a);
System.out.println(b);
System.out.println(a+b);
System.out.println(b-a);
运算的结果是
0.001
13.456
13.456999999999999
13.455;
表示对结果不太理解,难道ab相加的结果不应该是13.457么
高洛峰2017-04-17 17:43:32
これは、コンピューターの浮動小数点数が不正確になる可能性があるため (その可能性があることに注意してください)、正確な値に限りなく近い値しか得ることができませんが、完全に正確であることはできません。なぜそうなるのでしょうか?これは、浮動小数点数の格納規則によって決まります。まず、「2 を掛けて四捨五入し、順番に並べる」方法を使用して、10 進数 0.4 を 2 進数の 10 進数に変換する方法を見てみましょう。これは簡単です、あまりにも基本的です)、2 進数の世界では 0.4 は正確に表現できない、つまり、「表示」できないことがわかりました。メモリ (浮動小数点数) にのみ格納されます。ストレージには、符号ビット、指数ビット、仮数の 3 つの部分が含まれます (詳細は説明しません)。10 進数の世界では 1/3 を正確に表す方法がないことが理解できます。そしてもちろん、2 進数の世界では 1/5 を正確に表す方法はありません (2 進数に分数がある場合は、2 進数の世界では 1/5 は無限に繰り返される 10 進数です)。