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字符串来创建对象