超出数值范围的大数进行运算
如果基本整数和浮点数精度不能满足需求,那么可以使用java.math包中的BigInteger和BigDecimal两个类。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
BigInteger
将普通数转化为大数
BigInteger a=BigInteger.valueOf(num);//num需要转化的数值
常用的方法
BigInteger add(BigInteger other) //加
BigInteger subtract(BigInteger other) //减
BigInteger multiply(BigInteger other) //乘
BigInteger divide(BigInteger other) //除
不能用常见的算术运算符对大数值运算
示例
import java.math.BigInteger;
public class Test {public static void main(String[] args) {BigInteger num=BigInteger.valueOf(2);for (int i = 0; i < 100; i++) {num=num.multiply(BigInteger.valueOf(2));//需要提供BigInteger类型}System.out.println(num);//2535301200456458802993406410752}
}
BigDecimal
BigDecimal是Java中用于表示任意精度数字的类,它可以表示无限长度的小数,BigDecimal 通常支持任意位数的小数部分,用来对超过16位有效位的数进行精确的运算。
注:1.BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
2.BigDecimal进行运算时必须要保证对象本身不能是null,否则就会抛空指针异常。
构造方法
方法 | 含义 |
---|---|
BigDecimal(int val) | 创建一个具有参数所指定整数值的对象 |
BigDecimal(double val) | 创建一个具有参数所指定双精度值的对象 |
BigDecimal(long val) | 创建一个具有参数所指定长整数值的对象 |
BigDecimal(String val) | 创建一个具有参数所指定以字符串表示的数值的对象 |
常用的方法
方法 | 含义 |
---|---|
add(BigDecimal) | BigDecimal对象中的值相加,返回BigDecimal对象 |
subtract(BigDecimal) | BigDecimal对象中的值相减,返回BigDecimal对象 |
multiply(BigDecimal) | BigDecimal对象中的值相乘,返回BigDecimal对象 |
divide(BigDecimal) | BigDecimal对象中的值相除,返回BigDecimal对象。 |
abs() | 将BigDecimal对象中的值转换成绝对值 |
doubleValue() | 将BigDecimal对象中的值转换成双精度数 |
floatValue() | 将BigDecimal对象中的值转换成单精度数 |
longValue() | 将BigDecimal对象中的值转换成长整数 |
intValue() | 将BigDecimal对象中的值转换成整数 |
compareTo(BigDecimal val) | 比较大小,返回int类型。0(相等) 1(大于) -1(小于) |
max(BigDecimal val) | 两值比较,返回最大值 |
negate() | 求相反数,正变负,负变正 |
pow(int n) | 求乘方,如BigDecimal.valueOf(2).pow(3)的值为8 |
示例
import java.math.BigDecimal;public class Test {public static void main(String[] args){BigDecimal b1 = new BigDecimal("1");BigDecimal b2 = new BigDecimal("2");BigDecimal b3 = new BigDecimal("4");System.out.println("相加:"+b1.add(b2));System.out.println("相减:"+b1.subtract(b2));System.out.println("相乘:"+b2.multiply(b3));System.out.println("相除:"+b2.divide(b3));}
}