關於Java使用 BigDecimal 的錯誤 Rounding necessary / Non-terminating decimal expansion...

sBigDecimal是Java.Math中提供的API類,可以對16位有效的數進行精確的運算。在商業的應用中務必使用BigDecimal進行運算哦!

在使用過程中難免會遇到一下異常報錯,如 Rounding necessary ,這個錯誤字面意思應該就是進位機制必須設置吧。

 解決:檢查是否使用了設置小數點的方法,如 setScale,使用此方法務必加上進位,否則容易拋異常。

錯誤的用法:setScale(2)

正確的用法:setScale(2,BigDecimal.ROUND_HALF_UP)

BigDecimal.ROUND_DOWN 直接砍掉小數位後的,如 1.356 變成 1.35

BigDecimal.ROUND_UP 直接進位,如 1.342 變成 1.35

BigDecimal.ROUND_HALF_UP 典型的四捨五入進位,如 1.234 變成 1.23;1.236 變成 1.24

Non-terminating decimal expansion; no exact representable decimal result.

還有這個錯誤也是會經常遇到的,大概在你有使用除法的時候,不小心就異常啦,我們看看。

當遇到使用 BigDecimal.divide 時 除不盡而又沒有設置進位,便會報錯。

BigDecimal money = new BigDecimal("10")

錯誤的用法:money.divide(9)

正確的用法:money.divide(9,2,BigDecimal.ROUND_HALF_UP)

設置好精確位數和進位 就不會報異常。這是筆者在使用過程中不小心遇到的異常,雖是簡單,請勿吐槽哈。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章