Java-BigInteger和BigDecimal
概述
BigInteger
在Java中,有许多数字处理的类,由CPU原生提供的整形最大范围是64位long型整数。使用long型整数可以直接通过CPU指令进行 计算,速度很快。还有Integer类,但是这些类都有一定的局限性。
我们都知道 Integer 是 int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。Java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数。
使用
-
对BigInteger做运算时,只能使用实例化方法
-
和lang型整数运算相比,BigInteger不会由有范围限制,但缺点是速度比较慢
-
使用
longValueExact()
方法时,如果超出了long
型的范围,会抛出ArithmeticException
。
代码演示
public class BigIntegerDemo {
public static void main(String[] args) {
BigInteger b = new BigInteger("111111111111111111111111111111");
BigInteger b1 = new BigInteger("22222");
BigInteger b2 = b.add(b1);
System.out.println(b);
System.out.println(b1);
System.out.println(b2);
}
BigDecimal
概述
在计算机中不论是float还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精度。其根本原因是:十进制通常没有完全的二进制表示形式;十进制数的二进制表示形式可能不精确,只能无限接近那个值。
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
构造方法:BigDecimal(String val)
基本运算方法
add(), subtract(), multiply(), divide()
代码演示
public class BigDecimalDemo {
public static void main(String[] args) {
System.out.println(12-11.9);
//如果直接相减则不能得到其精确值
BigDecimal b = new BigDecimal("12");
BigDecimal b1 = new BigDecimal("11.9");
//而这样则可以
BigDecimal b2 = b.subtract(b1);
System.out.println(b2);
}