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)
- 参数一:除数值
- 参数二:保留的位数
- 参数三:舍入模式,详细自己可以去查阅