ホームページ > Java > &#&チュートリアル > Java の「double」型が財務計算で不正確な結果を生成するのはなぜですか?

Java の「double」型が財務計算で不正確な結果を生成するのはなぜですか?

Susan Sarandon
リリース: 2024-12-06 12:51:14
オリジナル
276 人が閲覧しました

Why Does Java's `double` Type Produce Inaccurate Results in Financial Calculations?

Java の二重計算における精度の問題: ケーススタディ

Java で倍精度浮動小数点演算を扱うときに問題が発生します。コード スニペットに示されているように、丸められた値を減算すると、固有の精度制限により予期しない結果が生じる可能性があります。

具体的には、この問題は一連の計算に起因します:

  • tempCommission: 78.75 (四捨五入)
  • netToCompany: 708.75 (787.5 - 78.75)
  • dCommission: 877.8499999999999 (1586.6 - 708.75)

dCommission の期待される結果は 877.85 ですが、累積丸めのため結果は切り捨てられます。

高精度の獣を飼いならす: BigDecimal の紹介

この精度の問題に対処するために、Java は任意精度の 10 進数演算を提供する java.math.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 で計算を行う場合、浮動小数点演算の落とし穴を避けるために BigDecimal を活用することが重要です。任意精度機能を活用することで、開発者は、上記のような複雑なシナリオであっても、正確で信頼性の高い結果を保証できます。

以上がJava の「double」型が財務計算で不正確な結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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