BigDecimal精确计算

在开发过程中经常会遇到精确计算,比如金额相关的计算,如果出现了精度丢失那肯定是不行了,所以就需要用到BigDecimal来进行相关的计算。

下面分别对普通的Java计算以及两种不同的BigDecimal初始化方式进行介绍。

  • 普通的Java计算

package test;

public class NormalCalculate {
    public static void main(String[] args) {
        double a = 1.2;
        double b = 1;
        double c = a - b;
        System.out.println(c);
    }
}

结果为

0.19999999999999996

显然出现了精度丢失, 在需要精确计算的业务场景,肯定是不能使用这种方式进行计算的。

  • 使用数值类型进行BigDecimal的初始化

什么是使用数值类型进行BigDecimal的初始化呢?

// 使用数值类型进行BigDecimal的初始化就是指传入构造函数中的参数是数值类型
BigDecimal decimaA = new BigDecimal(1.2);
BigDecimal decimaB = new BigDecimal(1);

 使用数值类型进行BigDecimal的初始化,然后进行计算

package test;

import java.math.BigDecimal;

public class BigDecimalNumber {
    public static void main(String[] args) {
        BigDecimal decimaA = new BigDecimal(1.2);
        BigDecimal decimaB = new BigDecimal(1);
        BigDecimal decimaC = decimaA.subtract(decimaB);// 减法运算
        System.out.println(decimaC);
    }
}

结果为

0.1999999999999999555910790149937383830547332763671875

 同样出现了精度丢失, 在需要精确计算的业务场景,也是不能使用这种方式进行计算的。

  • 使用字符串类型进行BigDecimal的初始化

// 使用字符串类型进行BigDecimal的初始化就是指传入构造函数中的参数是字符串类型
BigDecimal decimaD = new BigDecimal("1.2");
BigDecimal decimaE = new BigDecimal("1");

使用字符串类型进行BigDecimal的初始化,然后进行计算

package test;

import java.math.BigDecimal;

public class BigDecimalString {
    public static void main(String[] args) {
        BigDecimal decimaD = new BigDecimal("1.2");
        BigDecimal decimaE = new BigDecimal("1");
        BigDecimal decimaF = decimaD.subtract(decimaE);// 减法运算
        System.out.println(decimaF);
    }
}

结果为

0.2

 没有出现精度丢失, 在需要精确计算的业务场景,推荐使用这种方式进行计算。

 

BigDecimal提供了加减乘除的基本运算。

加法 add()函数     

减法subtract()函数

乘法multipy()函数   

除法divide()函数   

绝对值abs()函数

package test;

import java.math.BigDecimal;

public class BigDecimalTest {
    public static void main(String[] args) {
        // 使用字符串进行初始化
        BigDecimal decimaA = new BigDecimal("1.2");
        BigDecimal decimaB = new BigDecimal("2");
        BigDecimal decimaC = new BigDecimal("-2");

        // 加法
        BigDecimal decimaAdd = decimaA.add(decimaB);
        System.out.println("加法:" + decimaAdd);

        // 减法
        BigDecimal decimaSubtract = decimaA.subtract(decimaB);
        System.out.println("减法:" + decimaSubtract);

        // 乘法
        BigDecimal decimaMultipy = decimaA.multiply(decimaB);
        System.out.println("乘法:" + decimaMultipy);

        // 除法
        BigDecimal decimaDivide = decimaA.divide(decimaB);
        System.out.println("除法:" + decimaDivide);

        // 绝对值
        BigDecimal decimaAbs = decimaC.abs();
        System.out.println("绝对值:" + decimaAbs);
    }
}

 结果为

加法:3.2
减法:-0.8
乘法:2.4
除法:0.6
绝对值:2

 

你可能感兴趣的:(Java,BigDecimal,java运算)