如果你不设置的话,如果有 除不尽的话, 会出现下面的错误:

错误的代码

@Test
public void c_33() {

// 积分返现现金比值
BigDecimal returnCashRatio = new BigDecimal("1.5");
// 积分返现积分比值
BigDecimal returnPointRatio = new BigDecimal(88);
// 积分率 = 积分返现现金比值 除以 积分返现积分比值
BigDecimal rs = returnPointRatio.divide(returnCashRatio);
System.out.println("rs = " + rs);

}

报错信息:

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

at java.math.BigDecimal.divide(BigDecimal.java:1690)
at Test03.c_33(Test03.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...

解决办法

设置舍弃小数点多少位.

设置了之后就不会抛出上面哪个问题了

BigDecimal returnCashRatio = new BigDecimal("1.5");
// 积分返现积分比值
BigDecimal returnPointRatio = new BigDecimal(88);
// 积分率 = 积分返现现金比值 除以 积分返现积分比值
BigDecimal rs = returnPointRatio.divide(returnCashRatio, 2, BigDecimal.ROUND_HALF_UP);
System.out.println("rs = " + rs);