Non-terminating decimal expansion; no exact representable decimal result.  翻译为:非终止十进制扩展; 没有确切的可表示的小数结果;

翻译为人话就是说:BigDecimal是为高精度计算而设计的,而你的值是没有精确结果的;

举例:

BigDecimal b1=new BigDecimal(123);

BigDecimal b2=new BigDecimal(456);

BigDecimal c=b1.divide(b2);

1.0/3.0是除不尽的,所以抛出异常

解决方案:使用BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;

BigDecimal b1=new BigDecimal(123);

BigDecimal b2=new BigDecimal(456);

BigDecimal c=b1.divide(b2, 2, RoundingMode.HALF_UP);

其中   scale  为保留的小数位;RoundingMode roundingMode 为取舍模式(如:RoundingMode.HALF_UP 四舍五入);