BigDecimal 除算での終端のない 10 進展開の回避
Java の BigDecimal クラスは、高精度の数学演算を容易にするように設計されていますが、場合によっては「ArithmeticException: 終了しない 10 進数の展開。正確に表現できる 10 進数の結果がありません」エラーがスローされます。この例外は、2 つの BigDecimal オブジェクトを除算し、商が無限の小数展開を持つ場合に発生します。
例外の理由
BigDecimal のドキュメントによると、MathContext オブジェクト (精度と丸めモードの指定) が提供されると、算術演算が正確に実行されます。商に終端のない 10 進展開があり、正確に表現できない場合は、例外がスローされます。
例
BigDecimal a = new BigDecimal("1.6"); BigDecimal b = new BigDecimal("9.2"); a.divide(b) // raises the ArithmeticException
Fix
この問題を解決するには、ゼロ以外の精度と丸めモードを使用して MathContext オブジェクトを指定します。例:
a.divide(b, 2, RoundingMode.HALF_UP)
ここで、2 はスケール (小数点以下の桁数) を指定し、RoundingMode.HALF_UP は丸め方法を示します。
追加情報
以上がBigDecimal 除算で「ArithmeticException: 終了しない 10 進展開」を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。