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

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

Mary-Kate Olsen
リリース: 2024-11-15 10:11:02
オリジナル
878 人が閲覧しました

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

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