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)
设置好精确位数和进位 就不会报异常。这是笔者在使用过程中不小心遇到的异常,虽是简单,请勿吐槽哈。