Bigdecimal基本运算及小数保留方式枚举
1.Bigdecimal运算
final BigDecimal a = new BigDecimal("2.99");
final BigDecimal b = BigDecimal.valueOf(0.49);
//a+b
final BigDecimal add = a.add(b);
//a-b
final BigDecimal subtract = a.subtract(b);
//a*b
final BigDecimal multiply = a.multiply(b);
//a/b   保留4位小数  四舍五入
final BigDecimal divide = a.divide(b,4,BigDecimal.ROUND_HALF_EVEN);
System.out.println("a+b= "+add);    //输出  3.48
System.out.println("a-b= "+subtract);   //输出  2.50
System.out.println("a*b= "+multiply);   //输出  1.4651
System.out.println("a/b= "+divide); //输出  6.1020
2.Bigdecimal小数保留方式
final BigDecimal a = new BigDecimal("1.5");
//进        结果:2
System.out.println(a.setScale(0,BigDecimal.ROUND_UP));
//舍       结果:1
System.out.println(a.setScale(0,BigDecimal.ROUND_DOWN));
//向下取整       结果:1
System.out.println(a.setScale(0,BigDecimal.ROUND_FLOOR));
//向上取整       结果:2
System.out.println(a.setScale(0,BigDecimal.ROUND_CEILING));
//四舍五入       结果:2
System.out.println(a.setScale(0,BigDecimal.ROUND_HALF_UP));
//五舍六入       结果:1
System.out.println(a.setScale(0,BigDecimal.ROUND_HALF_DOWN));
//银行家舍入  四舍六入五考虑
// A =>五后无数字进1
// B => 五后有数字
//   B1 => 五后非零就进一,
//   B2 => 五后为零看五前奇偶,偶舍,奇进
System.out.println(BigDecimal.valueOf(1.5).setScale(0,BigDecimal.ROUND_HALF_EVEN));   //2
System.out.println(BigDecimal.valueOf(1.51).setScale(0,BigDecimal.ROUND_HALF_EVEN));   //2
System.out.println(BigDecimal.valueOf(1.59).setScale(0,BigDecimal.ROUND_HALF_EVEN));   //2
System.out.println(BigDecimal.valueOf(1.50).setScale(0,BigDecimal.ROUND_HALF_EVEN));   //2
System.out.println(BigDecimal.valueOf(2.50).setScale(0,BigDecimal.ROUND_HALF_EVEN));   //2
注:使用参数为float或double的BigDecimal创建对象会丢失精度。建议不要使用参数为float或double的BigDecimal创建对象。而是采用string字符串来创建对象