如果在控制台打印0.1+0.2,会发现计算出的结果并不是精确的,结果是0.30000000000000004
java中float类型和double类型在运算的时候可能会有误差,如果需要实现精确运算,可以借助java.math.BigDecimal类进行运算
一、概述
- java.math.BigDecimal类是为了解决精确运算的问题
- 将要计算的数据使用BigDecimal的构造器进行封装,调用相应的API即可完成运算,最后可以根据需要返回相应数据类型的计算结果
- 使用BigDecimal的运算方法不会影响参与运算的数据本身
二、构造方法
public BigDecimal(String val){}
- 入参的是需要计算的值
- 如果入参是数字之外的值,后面在运算时会报错
三、常用API及使用方法
public BigDecimal add(BigDecimal a)
- 加法运算
- 举例
public class demo {
public static void main(String[] args) {
System.out.println(0.1+0.2); //0.30000000000000004
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.add(b2)); //0.3
}
}
public BigDecimal substract(BigDecimal a)
- 减法运算
- 举例
public class demo {
public static void main(String[] args) {
System.out.println(0.1-0.2); //-0.1
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.subtract(b2)); //-0.1
}
}
public BigDecimal multiply(BigDecimal a)
- 乘法运算
- 举例
public class demo {
public static void main(String[] args) {
System.out.println(0.1*0.2); //0.020000000000000004
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.multiply(b2)); //-0.1
}
}
public BigDecimal divide(BigDecimal a)
- 除法运算
- 举例
public class demo {
public static void main(String[] args) {
System.out.println(0.1/0.2); //0.5
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.divide(b2)); //-0.1
}
}
xxxValue()
- 将BigDecimal的值转化为对应的基本数据类型
- xxx代表基本数据类型
- 举例
public class demo {
public static void main(String[] args) {
System.out.println(0.1+0.2); //0.30000000000000004
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
BigDecimal res = b1.add(b2);
double num = res.doubleValue();
System.out.println(num); //0.3
}
}