Java の丸め二重異常を克服する方法
Java では、浮動小数点計算により予期しない丸めの問題が発生することがあります。説明のために、次のコードを調べてみましょう:
double tempCommission = targetPremium.doubleValue() * rate.doubleValue() / 100d; double netToCompany = targetPremium.doubleValue() - tempCommission; double dCommission = request.getPremium().doubleValue() - netToCompany;
dCommission の期待値は 877.85 ですが、実際の結果は 877.8499999999999 とわずかに不正確です。この問題を解決するには、より正確な計算を使用する必要があります。
解決策は、java.math.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);
BigDecimal を使用すると、結果は期待値を正確に反映します:
877.85 = 1586.6 - 708.75
以上がJava の Double が不正確な丸めを生成するのはなぜですか? BigDecimal はそれをどのように解決できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。