BigInteger 和BigDecimal
- BigInteger
- BigDecimal
BigInteger
在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类。
如果要存储比 Integer 更大的数字就要用 BigInteger 类BigInteger 类型的数字范围较 Integer 类型的数字范围要大得多。BigInteger 支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值。
除了基本的加、减、乘、除操作之外,BigInteger 类还封装了很多操作,像求绝对值、相反数、最大公约数以及判断是否为质数等。
要使用 BigInteger 类,首先要创建一个 BigInteger 对象。BigInteger 类提供了很多种构造方法,其中最直接的一种是参数以字符串形式代表要处理的数字。例如,要将数字 5 转换为 BigInteger 对象,语句如下:
BigInteger bi=new BigInteger("5")
注意:这里数字 5 的双引号是必需的,因为 BigInteger 类构造方法要求参数是字符串类型。
方法名称 | 说明 |
---|---|
add(BigInteger val) | 做加法运算 |
subtract(BigInteger val) | 做减法运算 |
multiply(BigInteger val) | 做乘法运算 |
divide(BigInteger val) | 做除法运算 |
remainder(BigInteger val) | 做取余数运算 |
divideAndRemainder(BigInteger val) | 做除法运算,返回数组的第一个值为商, |
第二个值为余数 | |
pow(int exponent) | 做参数的 exponent 次方运算 |
negate() | 取相反数 |
shiftLeft(int n) | 将数字左移 n 位,如果 n 为负数,则做右移操作 |
shiftRight(int n) | 将数字右移 n 位,如果 n 为负数,则做左移操作 |
and(BigInteger val) | 做与运算 |
or(BigInteger val) | 做或运算 |
compareTo(BigInteger val) | 做数字的比较运算 |
equals(Object obj) | 当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false |
min(BigInteger val) | 返回较小的数值 |
max(BigInteger val) | 返回较大的数值 |
在用户输入的整型数字保存到 num 变量时,由于 BigInteger 类的构造方法只接收字符串类型的参数,所以使用“new BigInteger(num+"")
” 代码来创建 BigInteger 对象。
System.out.println("请输入一个整型数字:");//保存用户输入的数字int num=input.nextInt();//使用输入的数字创建BigInteger对象Biglnteger bi=new BigInteger(num+"");
BigDecimal
BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。一般的 float 和 double 类型数据只能用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal 类。BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。
BigDecimal 常用的构造方法如下。
- BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。
- BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。
下面列出了 BigDecimal 类用于实现加、减、乘和除运算的方法。
BigDecimal add(BigDecimal augend) //加法操作
BigDecimal subtract(BigDecimal subtrahend) //减法操作
BigDecimal multiply(BigDecimal multiplieand) //乘法操作
BigDecimal divide(BigDecimal divisor,int scale,int roundingMode ) //除法操作
其中,divide() 方法的 3 个参数分别表示除数、商的小数点后的位数和近似值处理模式。
因为BigDecimal 有接受double的能力,所以不需要特意加上“ ”。
System.out.println("请输入一个数字:");//保存用户输入的数字double num=input.nextDouble();//使用输入的数字创建BigDecimal对象BigDecimal bd=new BigDecimal(num);
上述代码将用户输入的数字保存到 num 变量中,然后调用“newBigDecimal(num)”方法来创建 BigDecimal 对象。