0%

Java中BigDecimal类型的加减乘除运算

Java中BigDecimal类型的加减乘除运算

BigDecimal提供了精确的数值计算。对Bigdecimal类型值进行加减乘除绝对值的运算,其实就是Bigdecimal的类方法的一些调用。


加法:add()

减法:subtract()

乘法:multiply()

除法:divide()

绝对值:abs()


BigDecimal有多种构造函数,常用的有2种。建议使用String构造方式,不建议使用double构造方式。

1
2
3
4
// 强制使用String的构造函数,double也有可能计算不太准确
// 原则是使用BigDecimal并且一定要用String来构造。
public BigDecimal(String val);
public BigDecimal(double val);

用法Demo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
al valueSec = new BigDecimal(1000000);
BigDecimal valueThi = new BigDecimal(-1000000);

//尽量用字符串的形式初始化
BigDecimal stringFir = new BigDecimal("0.005");
BigDecimal stringSec = new BigDecimal("1000000");
BigDecimal stringThi = new BigDecimal("-1000000");

//加法
BigDecimal addVal = valueFir.add(valueSec);
System.out.println("加法用value结果:" + addVal);
BigDecimal addStr = stringFir.add(stringSec);
System.out.println("加法用string结果:" + addStr);

//减法
BigDecimal subtractVal = valueFir.subtract(valueSec);
System.out.println("减法value结果:" + subtractVal);
BigDecimal subtractStr = stringFir.subtract(stringSec);
System.out.println("减法用string结果:" + subtractStr);

//乘法
BigDecimal multiplyVal = valueFir.multiply(valueSec);
System.out.println("乘法用value结果:" + multiplyVal);
BigDecimal multiplyStr = stringFir.multiply(stringSec);
System.out.println("乘法用string结果:" + multiplyStr);

//绝对值
BigDecimal absVal = valueThi.abs();
System.out.println("绝对值用value结果:" + absVal);
BigDecimal absStr = stringThi.abs();
System.out.println("绝对值用string结果:" + absStr);

//除法
BigDecimal divideVal = valueSec.divide(valueFir, 20, BigDecimal.ROUND_HALF_UP);
System.out.println("除法用value结果:" + divideVal);
BigDecimal divideStr = stringSec.divide(stringFir, 20, BigDecimal.ROUND_HALF_UP);
System.out.println("除法用string结果:" + divideStr);

}


1、System.out.println()中的数字默认是double类型的,double类型小数计算不精准

2、使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的。

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,因此它会被表示成与它最接近的 double 类型的值。所以必须改用传入String的构造方法.