代码实例
BigDecimal one = new BigDecimal(1);
BigDecimal two = new BigDecimal(2);
BigDecimal three = new BigDecimal(3);
BigDecimal add = one.add(two);
BigDecimal subtract = one.subtract(two);
BigDecimal multiply = one.multiply(two);
BigDecimal divide = one.divide(two);
BigDecimal divideScaleTwo = one.divide(three, 2, RoundingMode.HALF_UP);
int oneCompareTwo = one.compareTo(two);
int oneCompareOne = one.compareTo(one);
int threeCompareOne = three.compareTo(one);
System.out.println("add=" + add);
System.out.println("subtract=" + subtract);
System.out.println("multiply=" + multiply);
System.out.println("divide=" + divide);
System.out.println("divideScaleTwo=" + divideScaleTwo);
System.out.println("oneCompareTwo=" + oneCompareTwo);
System.out.println("oneCompareOne=" + oneCompareOne);
System.out.println("threeCompareOne=" + threeCompareOne);
打印结果
add=3
subtract=-1
multiply=2
divide=0.5
divideScaleTwo=0.33
oneCompareTwo=-1
oneCompareOne=0
threeCompareOne=1
RoundingMode模式说明
- RoundingMode.UP 正数向大靠,负数向小靠
- RoundingMode.DOWN 正数向小靠,负数向大靠
- RoundingMode.CEILING 正负都向大靠
- RoundingMode.FLOOR 正负都向小靠
- RoundingMode.HALF_UP 四舍五入
- RoundingMode.HALF_DOWN 五舍六入
- RoundingMode.HALF_EVEN
- RoundingMode.UNNECESSARY
BigDecimal 常见异常
BigDecimal exception = one.divide(three).setScale(2, RoundingMode.HALF_DOWN);
异常信息
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
解决方法
BigDecimal exception = one.divide(three, 2, RoundingMode.HALF_DOWN);