Bigdecimal devide报错:Non-terminating decimal expansion; no exact representable decimal result

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
 */