Non-terminating decimal expansion; no exact rep...

因爲須要處理精度比較高的浮點數,因此棄用double類型,改用BigDecimal類來進行數值處理。 ide

在加減乘時都沒有出現問題,可是到除法運算時,提示了以下錯誤: 函數

大概的意思是「沒法結束的除法表達式;沒有精確的除結果」。我當時輸入的10/3,結果應該是3.3333....333。 spa

 

因而在網上找資料,發現我原來的處理方式有問題。 ci

BigDecimal num1 = new BigDecimal("10"); im

BigDecimal num2 = new BigDecimal("3"); di

BigDecimal num3 = num1.divide(num2); vi

 

其實devide的函數定義以下 浮點數

BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; 數字

scale爲小數位數; 錯誤

roundingMode爲小數模式;

ROUND_CEILING
若是 BigDecimal 是正的,則作 ROUND_UP 操做;若是爲負,則作 ROUND_DOWN 操做。
ROUND_DOWN
從不在捨棄(即截斷)的小數以前增長數字。
ROUND_FLOOR
若是 BigDecimal 爲正,則做 ROUND_UP ;若是爲負,則做 ROUND_DOWN 。
ROUND_HALF_DOWN
若捨棄部分> .5,則做 ROUND_UP;不然,做 ROUND_DOWN 。
ROUND_HALF_EVEN
若是捨棄部分左邊的數字爲奇數,則做 ROUND_HALF_UP ;若是它爲偶數,則做 ROUND_HALF_DOWN 。
ROUND_HALF_UP
若捨棄部分>=.5,則做 ROUND_UP ;不然,做 ROUND_DOWN 。
ROUND_UNNECESSARY
該「僞舍入模式」實際是指明所要求的操做必須是精確的,,所以不須要舍入操做。
ROUND_UP
老是在非 0 捨棄小數(即截斷)以前增長數字。

寫成以下即可經過

BigDecimal num3 = num1.divide(num2,10,BigDecimal.ROUND_HALF_DOWN);

相關文章
相關標籤/搜索