BigDecimal

  • floatdouble类型在进行精确计算时会出现精度丢失的问题,可以使用BigDecimal解决。

1. BigDecimal常见方法

1.1 创建

  • BigDecimal(String val)
  • BigDecimal.valueOf(double val)
1
2
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = BigDecimal.valueOf(0.1);

1.2 加减乘除

  • add():加法
  • subtract():减法
  • multiply():乘法
  • divide():除法,除法需要指定精度和舍入模式
1
2
3
4
5
6
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b)); // 0.3
System.out.println(a.subtract(b)); // -0.1
System.out.println(a.multiply(b)); // 0.02
System.out.println(a.divide(b, 2, RoundingMode.HALF_UP)); // 0.50

1.3 比较

  • a.compareTo(b):-1表示a小于b,0表示a等于b,1表示a大于b
  • BigDecimal使用equals()方法进行等值比较会出现精度忽略问题
1
2
3
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.compareTo(b)); // -1

1.4 保留小数

  • setScale()
1
2
BigDecimal a = new BigDecimal("0.12345");
System.out.println(a.setScale(2, RoundingMode.HALF_UP)); // 0.12

2. BigDecimal工具类分享