BigDecimal常见异常: java.lang.ArithmeticException:Non-terminating decimal expansion……

BigDecimal——divide(除法):


情况一:


BigDecimal quantity = new BigDecimal("3");
BigDecimal weight = new BigDecimal("10");
System.out.println("单件重:"+weight.divide(quantity));

 

情况二:

BigDecimal quantity = new BigDecimal("3");
BigDecimal weight = new BigDecimal("10");
System.out.println("单件重:"+weight.divide(quantity).setScale(6,BigDecimal.ROUND_HALF_UP));

以上两种情况,都会抛如下异常:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    at java.math.BigDecimal.divide(Unknown Source)
    at BigDecimal_Test1.main(BigDecimal_Test1.java:10)

情况三:

BigDecimal quantity = new BigDecimal("5");
BigDecimal weight = new BigDecimal("10");
System.out.println("单件重:"+weight.divide(quantity));

运行结果:

单件重:2


综合以上各种情况,可得结论:

  • 在使用BigDecimal做除法运算时,如果可以除尽,则不会抛出异常
  • 如果除不尽的话,则必须保留小数位,否则会抛“java.lang.ArithmeticException”异常
  • 在除不尽的情况下,必须在调用divide()方法时,传入所要保留的小数位。因为BigDecimal需要确切的值,在使用devide的时候可能会出现无限循环的情况,导致BigDecimal不能得到一个准确的值,所以抛异常。
  • devide()方法说明:java.math.BigDecimal.divide(BigDecimal divisor, int scale, int roundingMode)
    • 参数一:除数值
    • 参数二:保留的位数
    • 参数三:舍入模式,详细自己可以去查阅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值