BigDecimal进行除以的时候需要设置舍弃多少位 Non-terminating decimal expansion; no exact representable decimal result.

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

错误的代码

  1. @Test
  2. public void c_33() {
  3. // 积分返现现金比值
  4. BigDecimal returnCashRatio = new BigDecimal("1.5");
  5. // 积分返现积分比值
  6. BigDecimal returnPointRatio = new BigDecimal(88);
  7. // 积分率 = 积分返现现金比值 除以 积分返现积分比值
  8. BigDecimal rs = returnPointRatio.divide(returnCashRatio);
  9. System.out.println("rs = " + rs);
  10. }

报错信息:

  1. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
  2. at java.math.BigDecimal.divide(BigDecimal.java:1690)
  3. at Test03.c_33(Test03.java:55)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  5. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  6. ...

解决办法

设置舍弃小数点多少位.

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

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);