ホームページ > Java > &#&チュートリアル > Java の Double が不正確な丸めを生成するのはなぜですか? BigDecimal はそれをどのように解決できるのでしょうか?

Java の Double が不正確な丸めを生成するのはなぜですか? BigDecimal はそれをどのように解決できるのでしょうか?

Patricia Arquette
リリース: 2024-12-16 21:25:12
オリジナル
634 人が閲覧しました

Why Does Java's Double Produce Inaccurate Rounding, and How Can BigDecimal Solve It?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート