BigDecimal进行除以的时候需要设置舍弃多少位 Non-terminating decimal expansion; no exact representable decimal result.
如果你不设置的话,如果有 除不尽的话, 会出现下面的错误:
错误的代码
@Testpublic 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);
