今天在寫一個JAVA程序的時候出現了異常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
發現報錯的語句是:java
1
|
foo.divide(bar));
|
原來JAVA中若是用BigDecimal作除法的時候必定要在divide方法中傳遞第二個參數,定義精確到小數點後幾位,不然在不整除的狀況下,結果是無限循環小數時,就會拋出以上異常。
解決方法:app
1
|
foo.divide(bar,
2
, BigDecimal.ROUND_HALF_UP);
|
注意這個divide方法有兩個重載的方法,一個是傳兩個參數的,一個是傳三個參數的:ide
兩個參數的方法:this
@param divisor value by which this {@code BigDecimal} is to be divided. 傳入除數spa
@param roundingMode rounding mode to apply. 傳入round的模式code
三個參數的方法:ci
@param divisor value by which this {@code BigDecimal} is to be divided. 傳入除數
@param scale scale of the {@code BigDecimal} quotient to be returned. 傳入精度
@param roundingMode rounding mode to apply. 傳入round的模式it