Java中BigDecimal类型的加减乘除运算
BigDecimal提供了精确的数值计算。对Bigdecimal类型值进行加减乘除绝对值的运算,其实就是Bigdecimal的类方法的一些调用。
加法:add()
减法:subtract()
乘法:multiply()
除法:divide()
绝对值:abs()
BigDecimal有多种构造函数,常用的有2种。建议使用String构造方式,不建议使用double构造方式。
1 2 3 4
|
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
的构造方法.