
Simplememory
V1
2022/06/25阅读:15主题:蔷薇紫
【日常记录】——对BigDecimal除法运算时遇到的Bug
最近在项目测试环境中,遇到这样一个问题;查看日志,报错信息如下:
❝Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(BigDecimal.java:1693)
❞
通过定位发现:是在代码中使用BigDecimal 的divide方法时出现了异常。
检查发现:这是因为在BigDecimal 没有整除报的错误,因此我们需要向divide函数传入参数设置保留几位小数。
「问题还原」
下面通过一个测试代码演示没有整除的场景。
BigDecimal a = new BigDecimal(1);
BigDecimal b = new BigDecimal(3);
BigDecimal result = a.divide(b);
System.out.println("result = " + result);
「解决办法」
我们对其divide方法,设置参数传入几位小数,以及具体的取整模式即可。
// 保留两位小数、四舍五入
BigDecimal result = a.divide(b,2,BigDecimal.ROUND_HALF_UP);
作者介绍

Simplememory
V1