大数
如果基本的证书和浮点数精度不能满足需求,那么可以使用java.math 包中的两个类:BigInteger、BigDecimal。
这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal类实现任意精度的浮点数运算。
例如:
public static void main(String[] args) {
BigInteger bigInteger = new BigInteger("123456789987654321123456789");
System.out.println("BigInteger:"+bigInteger);
BigDecimal bigDecimal = new BigDecimal("12345678998.7654321123456789");
System.out.println("BigDecimal:"+bigDecimal);
}
使用静态的valueOf() 方法可以将普通的数值转换为大数。
BigInteger n = BigInteger.valueOf(10000);
但是,我们熟悉的 “+ - * / ”算数运算符不能处理大数,而要适应大数类提供的add()、substract()、multiply()、divide() 方法。
例如:
public static void main(String[] args) {
BigInteger a = new BigInteger("123456789");
BigInteger b = new BigInteger("987654321");
System.out.println("a = " + a);
System.out.println("b = " + b);
BigInteger c = a.add(b);
System.out.println("a + b = " + c);
BigInteger d = a.multiply(b.add(c));
System.out.println("a * (b + c) = " + d);
}
|