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