MathContext を使用せずに BigDecimal を除算すると、「非終了小数拡張」例外が発生するのはなぜですか?

Susan Sarandon
リリース: 2024-11-15 09:58:02
オリジナル
337 人が閲覧しました

Why Does Dividing BigDecimals Without a MathContext Result in a

BigDecimals の除算における非終了 10 進数展開例外

MathContext を指定せずに 2 つの BigDecimal オブジェクトを除算すると、操作により次のエラーが発生する可能性があります。 「ArithmeticException: 終端のない 10 進展開です。正確に表現できません」 10 進数の結果" 例外。

これは、特定の除算の商 (1 を 3 で割ったものなど) が無限に長い 10 進数展開になるためです。精度が 0 (デフォルト) に設定されている場合、正確な結果を計算する必要があります。商に非終了展開がある場合、例外がスローされます。

解決策

これを修正するには、特定のスケールと丸めモードを持つ MathContext を提供する必要があります。 。次のコードはこれを示しています。

a.divide(b, 2, RoundingMode.HALF_UP)
ログイン後にコピー

この例では、スケールは 2 に設定され、丸めモードは RoundingMode.HALF_UP に設定されています。これにより、除算結果が特定のスケールに丸められ、例外が確実に回避されます。

詳細については、Java 11 BigDecimal ドキュメントまたはこのブログ投稿などの外部リソースを参照してください。

以上がMathContext を使用せずに BigDecimal を除算すると、「非終了小数拡張」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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