Java の BigDecimal クラスを使用して除算演算を実行すると、次の例外が発生する場合があります:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
このエラーは、除算演算の結果が無限大の小数商となる場合に発生します。長い展開。デフォルトでは、BigDecimal 演算は正確です。つまり、四捨五入せずに正確な数学的結果が生成されます。
ただし、結果に終端のない 10 進展開があり、正確な結果が期待される場合、divide メソッドは ArithmeticException をスローします。 、使用される MathContext オブジェクトの精度設定が 0 の場合)。
この問題を解決するには、 MathContext オブジェクト。これにより、結果が指定された小数点以下の桁数に強制的に丸められます:
a.divide(b, 2, RoundingMode.HALF_UP)
この場合、2 はスケール (小数点以下の桁数)、RoundingMode.HALF_UP は使用する丸めモードです。 。精度を指定すると、有限で表現可能な 10 進数の結果を取得できます。
以上がJava の BigDecimal が非終了 10 進数展開に対して ArithmeticException をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。