java
主页 > 软件编程 > java >

BigDecimal divide除法除不尽报错的问题及解决

2022-06-18 | 酷站 | 点击:

BigDecimal divide除法除不尽报错

用BigDecimal做除法的时候,直接拿起两数怼上除法有时候会出现除不尽就会报错

列如:

1

2

3

BigDecimal a = new BigDecimal(10);

BigDecimal re = a.divide(new BigDecimal(3));

System.out.println(re);

或:

1

2

3

BigDecimal a = new BigDecimal(10);

BigDecimal re = a.divide(new BigDecimal(3)).setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println(re);

直接这样除是会出现除不尽报错的

解决办法

除的时候直接截取位数就好了

1

2

3

BigDecimal a = new BigDecimal(10);

BigDecimal re = a.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);

System.out.println(re);

关于BigDecimal除法问题

BigDecimal做除法时

尽量使用divide(BigDecimal divisor, int scale, int roundingMode),这个方法

divisor:被除数 scale保留小数位数 roundingMode保留小数时采用的方法,一般使用BigDecimal.ROUND_UP(四舍五入)

如果不指定保留小数位数,在遇到除不尽的情况下就会报错

BigDecimal源码

1

2

3

4

5

try {

    quotient = this.divide(divisor, mc);

} catch (ArithmeticException e) {

    throw new ArithmeticException("Non-terminating decimal expansion; " +

                                  "no exact representable decimal result.");

原文链接:https://blog.csdn.net/jasdolphin/article/details/105585098
相关文章
最新更新