由於非終止十進位擴展導致的ArithmeticException
使用Java 的BigDecimal 類別執行除法運算時,可能會遇到以下異常:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
登入後複製
當除法運算產生具有無限長擴展的小數商時,會發生此錯誤。預設情況下,BigDecimal 運算是精確的,這意味著它們會產生精確的數學結果,而無需捨入。
但是,當結果具有非終止十進位擴展並且需要精確結果時(即,divide 方法會拋出 ArithmeticException)。 ,當使用的 MathContext 物件的精確度設定為 0 時)。
要解決此問題,您可以為 MathContext 指定非零精度設定 目的。這將強制結果四捨五入到指定的小數位數:
a.divide(b, 2, RoundingMode.HALF_UP)
登入後複製
在本例中,2 是比例(小數位數),RoundingMode.HALF_UP 是要使用的捨入模式。透過指定精度,可以獲得有限且可表示的小數結果。
以上是為什麼 Java 的 BigDecimal 會針對非終止十進位擴充拋出 ArithmeticException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!