BigDecimal 除算で「ArithmeticException: 終了しない 10 進展開」を回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-12 10:50:02
オリジナル
677 人が閲覧しました

How to Avoid

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 は丸め方法を示します。

追加情報

  • ArithmeticContext オブジェクトを使用すると、計算の丸めと精度を制御できます。
  • 正確な結果が得られない場合、操作は指定された丸めモードを使用して結果を近似します。
  • 詳細については、Java ドキュメントまたはこのブログ投稿を参照してください: https://blog.frankel.ch/2013/09/avoid-arithmetic-Exception-in-java-bigDecimals.html

以上がBigDecimal 除算で「ArithmeticException: 終了しない 10 進展開」を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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