报错记录-divide方法的精确问题

报错描述

Caused by: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

数据除法的时候要考虑精确问题,有可能产生除不完的现象

例如:

1
2
3
4
5
6
public static void main(String[] args) {
BigDecimal a=new BigDecimal("1");
BigDecimal b=new BigDecimal("3");
BigDecimal c=a.divide(b);
System.out.println(c);
}

就会报错

解决办法

divide方法里,加上保留几位,以及保留的方式,就不会报错了

1
2
3
4
5
6
public static void main(String[] args) {
BigDecimal a=new BigDecimal("1");
BigDecimal b=new BigDecimal("3");
BigDecimal c= a.divide(b, 2, BigDecimal.ROUND_HALF_UP);
System.out.println(c);
}

其他

在 Java9 中 divide的方法有修改,旧的方法已经弃用了

旧方法

1
2
@Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

新方法

1
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)