今天使用BigDecimal的setScale方法控制小数位时遇到了java.lang.ArithmeticException: Rounding necessary错误,经查,setScale方法有2中使用方法:
1.只设置小数位
setScale(n),例如:
BigDecimal bigDecimal = new BigDecimal("1.25456");
bigDecimal.setScale(2) // 结果:报错
注:该用法适用于原数据小数位小于或等于指定小数位,当原数据小数位大于指定小数位n时,会报错:java.lang.ArithmeticException: Rounding necessary。这个时候就需要用第二种方法
2.设置小数位及如何进位
setScale(n,mode),例如:
bigDecimal.setScale(2, BigDecimal.ROUND_UP)
该用法不限制原数据小数位,超过指定小数位n时,根据后面的mode参数进行处理,常见参数:
BigDecimal.ROUND_HALF_UP:四舍五入
BigDecimal.ROUND_DOWN:直接舍去多余的位数
BigDecimal.ROUND_UP:直接进位
BigDecimal.ROUND_CEILING:向上进位
BigDecimal.ROUND_FLOOR:向下舍位
还有其他一下不常用的参数,有兴趣的可以再查阅其他资料。