Java の二重計算における精度の問題: ケーススタディ
Java で倍精度浮動小数点演算を扱うときに問題が発生します。コード スニペットに示されているように、丸められた値を減算すると、固有の精度制限により予期しない結果が生じる可能性があります。
具体的には、この問題は一連の計算に起因します:
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 サイトの他の関連記事を参照してください。