使用数字计算工具Bigdecimal时,出现java.lang.ArithmeticException: Rounding necessary解决以及解析


在进行Bigdecimal进行计算并且设置精度时出现错误:java.lang.ArithmeticException: Rounding necessary

问题解析-可能出现的问题的原因有:

(1)使用BigDecimal.setScale(int newScale)方法时,newScale参数值小于0,导致报错

  解决方式:判断newScale的大小再进行设置精度;如

  Integer newScale = -1;

  BigDecimal num = new BigDecimal("0.0008");

  if ( newScale > 0 ) {

    num.setScale(newScale );

(2)对BigDecimal对象设置了精度,但是没有设置取舍方式,会报这个错误(大多数是这种情况)

  解决方式:设置精度时添加取舍方式;如

  Bigdecimal num = new Bigdecimal(123.45).setScale(2);

  修改为:

  Bigdecimal num = new Bigdecimal(123.45).setScale(2,,BigDecimal.ROUND_HALF_UP);