【日常记录】——对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);

img

解决办法

我们对其divide方法,设置参数传入几位小数,以及具体的取整模式即可。

// 保留两位小数、四舍五入
BigDecimal result = a.divide(b,2,BigDecimal.ROUND_HALF_UP); 

本文由mdnice多平台发布

你可能感兴趣的:(程序员)