Non-terminating decimal expansion; no exact representable decimal result.

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

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

举例:

BigDecimal b1=new BigDecimal(1.0);
BigDecimal b2=new BigDecimal(3.0);
BigDecimal c=b1.divide(b2);

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

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

BigDecimal b1=new BigDecimal(1.0);
BigDecimal b2=new BigDecimal(3.0);
BigDecimal c=b1.divide(b2,3,RoundingMode.HALF_UP);

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

RoundingMode具有哪些模式请参照我的另一篇博客:https://www.cnblogs.com/minxl/p/10247770.html

猜你喜欢

转载自www.cnblogs.com/minxl/p/10247802.html
今日推荐