私の同僚は次のような実験をしました:
public class DoubleDemo {
public static void main(String[] args) {
double a = 1.435;
double b = 1.43;
double c = a - b;
System.out.println(c);
}
}
この第 1 レベルの操作では、次の出力が期待されます。
0.005
しかし予想外に出力は次のようになりました。
0.0050000000000001155
なぜ double はこのような単純な操作で失敗するのでしょうか? また、double がこの作業のデータ型ではない場合、何を使用すればよいのでしょうか?
ベストアンサー1
double
内部的には分数として保存されますバイナリ- のように1/4 + 1/8 + 1/16 + ...
値0.005
、または値1.435
は、バイナリの正確な分数として保存できないため、double
正確な値を保存することはできず0.005
、減算された値は正確ではありません。
正確な 10 進演算が必要な場合は、 を使用しますBigDecimal
。
また、この記事役に立つ読み物。