基于java11API和源码整理
说明:因为大数类用得比较少,就整理了一下基本的运算方法。
BigInteger、BigDecimal
首先理解什么大数?为什么需要大数?
大数是超过int、long、float和double等基本数据类型已经在精度范围的数,在金融行业货币等大数值比较常见。因为基本数据类型无法满足经度需求,因此java提供了BigInteger和BigDecimal两个大数类。
两个小数进行运算是存在误差的,例:
public class Demo {
public static void main(String[] args) {
double x = 0.1;
double y = 0.2;
System.out.println(x+y); //计算结果不是0.3,而是0.30000000000000004,是存在误差的
}
}
BigInteger
java.math.BigInteger:不可变的任意精度整数
valueOf
BigInteger.valueOf(long a):返回一个BigInteger,值为a
源码:
public static BigInteger valueOf(long val) {
// If -MAX_CONSTANT < val < MAX_CONSTANT, return stashed constant
if (val == 0)
return ZERO;
if (val > 0 && val <= MAX_CONSTANT)
return posConst[(int) val];
else if (val < 0 && val >= -MAX_CONSTANT)
return negConst[(int) -val];
return new BigInteger(val);
}
add
add(BigInteger val):返回(this+val)的BigInteger
subtract
subtract(BigInteger val):返回(this-val)的BigeInteger
multiply
multiply(BigInteger val):返回(this*val)的BigInteger
divide
divide(BigInteger val):返回(this/val)的BigInteger
BigDecimal
java.math.BigDecimal:不可变的任意精度的有符号十进制数。
valueOf
BigDecimal.valueOf(long a):返回一个BigDecimal,值为a
doubleValue
doubleValue():将BigDecimal转换为double
intValue
intValue():将BigDecimal转换为int
add
add(BigDecimal val):返回(this+val)的BigDecimal
subtract
subtract(BigDecimal val):返回(this-val)的BigDecimal
multiply
multiply(BigDecimal val):返回(this*val)的BigDecimal
divide
divide(BigDecimal val):返回(this/val)的BigDecimal