ホームページ >Java >&#&チュートリアル >Java の BigDecimal が非終了 10 進数展開に対して ArithmeticException をスローするのはなぜですか?

Java の BigDecimal が非終了 10 進数展開に対して ArithmeticException をスローするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 10:11:02902ブラウズ

Why Does Java's BigDecimal Throw an ArithmeticException for Non-Terminating Decimal Expansions?

非終了 10 進展開による ArithmeticException

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。