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