金融放心算钱时,常用反减操作,来避免钱因为除不尽而丢失。
反减:最后一个月的钱等于总金额-前几个月的总额
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
A.divide(B));
原来JAVA中如果用BigDecimal
做除法的时候一定要在divide
方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。 解决方法:
A.divide(B, 2, BigDecimal.ROUND_HALF_UP);
参数说明:
- 除数
- 精度
- round的模式
round模式
UP(BigDecimal.ROUND_UP), // 进位处理,2.35变成2.4
DOWN(BigDecimal.ROUND_DOWN), // 直接删除多余的小数位,如2.35会变成2.3
CEILING(BigDecimal.ROUND_CEILING),
FLOOR(BigDecimal.ROUND_FLOOR),
HALF_UP(BigDecimal.ROUND_HALF_UP), // 四舍五入,2.35变成2.4
HALF_DOWN(BigDecimal.ROUND_HALF_DOWN), // 四舍五入,2.35变成2.3,如果是5则向下舍
HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
评论前必须登录!
注册