概念
极少数特殊情况下,我们会感觉整数和浮点数的精度都不能满足我们的要求,这个时候我们需要使用到两个特殊的类:BigInteger和BigDecimal。这两个类对数据的精度处理很强大,可以处理任意包含长度数字序列的数值。BigInteger可以实现任意精度的整数运算,BigDecimal可以实现任意精度的浮点数运算。
使用静态的valueOf方法可以将普通的数值转化为大数类型:
BigInteger a = BigInteger.valueOf(100);
对于一些相当大的数,可以使用一个带字符串参数的构造器:
BigInteger reallyBig = new BigInteger("1521951919974948521591498614658741974141641519614974168416516114914196419");;
大数类还有一些常量:
BigInteger.ZERO, BigInteger.ONE, BigInteger.TWO, BigInteger.TEN
注意:我们不能使用我们常用的运算符(如+和-)处理大数,而需要使用大数类中的add和multiply方法
BigInteger c = a.add(b); //c = a + b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d = c * (b + 2)
BigIntegerAPI
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
//返回这个大整数和另一个大整数other的和,差,积,商以及余数
BigInteger sqrt()
//得到这个BigInteger的平方根
int compareTo(BigInteger other)
//如果这个大整数与另一个大整数other相等,返回0;如果这个大整数小于另一个大整数other,返回负数;否则,返回正数
static BigInteger ValueOf(long x)
//返回值等于x的大整数
BigDecimalAPI
BigDecimal add(BigDecimal other)
BigDecimal subtract(BigDecimal other)
BigDecimal multiply(BigDecimal other)
BigDecimal divide(BigDecimal other)
BigDecimal divide(BigDecimal other, RoundingMode mode)
/*返回这个大实数与other的和,差,积。如果商是个无限循环小数,
第一个divide方法会抛出一个异常。要得到一个舍入的结果,就要使用第二个方法。
RoundingMode.HALF_UP是指四舍五入方式。*/
int compareTo(BigDecimal other)
//如果这个大实数与other相等,返回0;如果这个大实数小于other,返回附属;否则返回正数
static BigDecimal ValueOf(long x)
static BigDecimal ValueOf(long x, int n)
//返回值等于x或x/10ⁿ的一个大实数