1. ホーム
  2. java

[解決済み] Java 丸め誤差の解決方法 [重複] (英語)

2023-05-09 04:34:23

質問

引き算が何らかの問題を引き起こしているようで、結果の値が間違っているようです。

double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;

78.75 = 787.5 * 10.0/100d

double netToCompany = targetPremium.doubleValue() - tempCommission;

708.75 = 787.5 - 78.75

double dCommission = request.getPremium().doubleValue() - netToCompany;

877.8499999999999 = 1586.6 - 708.75

その結果、期待値は877.85となります。

正しい計算をするためには、どうしたらよいでしょうか。

どのように解決するのですか?

浮動小数点演算の精度を制御するためには java.math.BigDecimal . 読む BigDecimalの必要性 を読んでください。

あなたの例では、最後の行はBigDecimalを使用すると次のようになります。

import java.math.BigDecimal;

BigDecimal premium = BigDecimal.valueOf("1586.6");
BigDecimal netToCompany = BigDecimal.valueOf("708.75");
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission + " = " + premium + " - " + netToCompany);

この結果、次のような出力が得られます。

877.85 = 1586.6 - 708.75