1. 大整数转换
这两个类在开发中也是比较常用到的类,例如我们在进行毫秒级的时间戳的运算时,可能会超出整数或者浮点数的范围,或者无法保证计算结果的精度准确。而BigInteger和BigDecimal可以处理包含任意长度数字序列的数值。BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。在进行计算时我们可以使用BigInteger类和BigDecimal类的静态valueOf()方法将普通的数值转换为大数值,如:
long x = 123456789111231l;
//BigInteger类中的valueOf()方法入参为long类型,long类型最长支持19位数字
BigInteger a = BigInteger.valueOf(x);
double f = 0.13213123131d;
//BigDecimal类中的valueOf传参可为double、long或者是一个BigInteger对象
BigDecimal b = BigDecimal.valueOf(f);
2. 大整数计算
在进行大整数转换时,我们实际上是将一个基本类型的数值转换成一个对象,所以在进行运算时,当然也不能使用基本的运算符,而是实用类中定义好的方法。以BigInteger为例,常见运算如下:
- 加运算
long x = 1111111111111111111l;
long y = 2222222222222222222l;
BigInteger a = BigInteger.valueOf(x);
BigInteger b = BigInteger.valueOf(y);
a.add(b);
- 减运算
b.subtract(a);
- 乘运算
b.multiply(a);
- 除运算
b.divide(b);