java常用类库之BigDecimal类

如果在控制台打印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
    }
}

Guess you like

Origin blog.csdn.net/future_god_qr/article/details/121174994