Bigdecimal Divide除法计算报错:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1690)
at com.itzhimei.error.BigdecimalDivideTest.main(BigdecimalDivideTest.java:14)
代码:
import java.math.BigDecimal;
/**
* Bigdecimal Divide 报错
*/
public class BigdecimalDivideTest {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(3);
BigDecimal divide = a.divide(b);
System.out.println(divide);
}
}
原因:因为没有指定精度,一般加减乘可以不指定精度,除法在能除尽的情况下也不用指定精度。
但是一旦除不尽,且没有指定精度,则会报错:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
解决:对除法都指定精度,也就是保留几位小数。
代码:
import java.math.BigDecimal;
/**
* Bigdecimal Divide 报错
*/
public class BigdecimalDivideTest {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(3);
//BigDecimal divide = a.divide(b);//未指定精度报错
BigDecimal divide = a.divide(b,2,BigDecimal.ROUND_HALF_UP);
System.out.println(divide);
}
}
/* 输出结果
3.33
*/