加法
BigDecimal b1 = new BigDecimal(10);
BigDecimal b2 = new BigDecimal(5);
System.out.println(b1.add(b2));
// 输出结果:15
BigDecimal b3 = new BigDecimal(13.14);
BigDecimal b4 = new BigDecimal(5.20);
System.out.println(b3.add(b4));
// 输出结果:18.34000000000000074606987254810519516468048095703125
System.out.println(b3.add(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
// 输出结果:18.34
减法
BigDecimal b1 = new BigDecimal(10);
BigDecimal b2 = new BigDecimal(5);
System.out.println(b1.subtract(b2));
// 输出结果:5
BigDecimal b3 = new BigDecimal(13.14);
BigDecimal b4 = new BigDecimal(5.20);
System.out.println(b3.subtract(b4));
// 输出结果:7.94000000000000039079850466805510222911834716796875
System.out.println(b3.subtract(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
// 输出结果:7.94
乘法
BigDecimal b1 = new BigDecimal(10);
BigDecimal b2 = new BigDecimal(5);
System.out.println(b1.multiply(b2));
// 输出结果:50
BigDecimal b3 = new BigDecimal(13.14);
BigDecimal b4 = new BigDecimal(5.20);
System.out.println(b3.multiply(b4));
// 输出结果:68.328000000000005289990667733945984784716040408651717701256356196637398170423693954944610595703125
System.out.println(b3.multiply(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
// 输出结果:68.33
除法
BigDecimal b1 = new BigDecimal(10);
BigDecimal b2 = new BigDecimal(5);
System.out.println(b1.divide(b2));
// 输出结果:2
BigDecimal b3 = new BigDecimal(10);
BigDecimal b4 = new BigDecimal(3);
System.out.println(b3.divide(b4));
// 提示Non-terminating decimal expansion; no exact representable decimal result异常
BigDecimal b5 = new BigDecimal(13.14);
BigDecimal b6 = new BigDecimal(5.20);
System.out.println(b5.divide(b6));
// 提示Non-terminating decimal expansion; no exact representable decimal result异常
System.out.println(b5.divide(b6).setScale(2, BigDecimal.ROUND_HALF_UP));
// 提示Non-terminating decimal expansion; no exact representable decimal result
System.out.println(b5.divide(b6,2,BigDecimal.ROUND_HALF_UP));
// 输出结果:2.53
加、减、乘其实没什么好说的,值得注意的是当BigDecimal对象是以new BIgDecimal(double val)创建的,则执行加、减、乘运算时会存在精度问题,需要设置需要保留的小数位和进位方式,即使用setScale方法;
而对于除法,无论是参数是double类型的,还是除不尽的情况,都需要做格式化,否则会报Non-terminating decimal expansion; no exact representable decimal result异常,且写法与加、减、乘不一样。