我们在进行A除B的时候,需要将四舍五入的逻辑放入除法的过程中就定义,不要等到A/B结果出来了再去进行四舍五入,这样会出现问题。下面举例
10%3
我们拿10除3为例,很明显,结果是一个除不尽的小数3.3333...
直接除
java
public static void main(String[] args) {
BigDecimal A = new BigDecimal("10");
BigDecimal B = new BigDecimal("3");
System.out.println(A.divide(B).setScale(2, RoundingMode.HALF_UP));
}
结果报错Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
表示没有精确的表示decimal结果,异常在除法计算的过程中就抛出了,所以都没走到setScale()方法
正确的方式
java
public static void main(String[] args) {
BigDecimal A = new BigDecimal("10");
BigDecimal B = new BigDecimal("3");
System.out.println(A.divide(B, 2, RoundingMode.HALF_UP));
}
结果为3.33,正确的保留两位小数和四舍五入了,这是在除法计算的过程中就执行了的。