BigInteger 大整形
Java中,整数有四种类型:byte
(1字节),short
(2字节),int
(4字节),long
(8字节)
当整数过大不能满足需要时,需要用BigInteger
存储
1 构造方法
方法 | 说明 |
---|---|
public BigInteger(String val) | 获取指定大整数 |
public BigInteger(int num, Randow r) | 获取随机大整数,范围[0, 2^num) |
public BigInteger(String val, int radix) | 获取指定进制的大整数 |
此外还有一个静态方法可以获取BigInteger的对象
public static BigInteger valueOf(long val)
静态方法注意:
- 能表示的范围小,只能在long的范围内
- 内部对常用整数[-16, 16]进行的优化:提前创好了对象,多次获取不会重新创建对象
public class Demo {
public static void main(String[] args) {
BigInteger bi1 = BigInteger.valueOf(16);
BigInteger bi2 = BigInteger.valueOf(16);
//"=="比较的是地址值,如果返回true,说明用的是同一个对象
System.out.println(bi1 == bi2); //true
}
}
如果数据小于long,就用静态方法valueOf(long val)创建对象;如果数据很大,就用BigInteger(String val)创建对象
BigInteger的对象一旦创建,内部记录的值不能改变。
只要进行计算都会产生一个新的BigInteger对象。
2 常用方法
方法 | 说明 |
---|---|
add(BigInteger val) | 加 |
subtract(BigInteger val) | 减 |
multiply(BigInteger val) | 乘 |
divide(BigInteger val) | 除,获取商 |
BigInteger[] divideAndRemainder(BigInteger val) | 除,获取商和余数;0索引是商,1索引是余数 |
equals(Object o) | 比较大小是否相同 |
pow(int e) | 返回e次幂 |
max(BigInteger val) | 返回较大值(不会重新创建对象) |
min(BigInteger val) | 返回较小值(不会重新创建对象) |
intValue(BigInteger val) | 转为int类型,超出int范围会有误 |
3 存储上限
BigInteger内部是将大整数拆分成若干段存储在一个整形数组中的,
理论上:
数组最多能存储的元素个数:21亿多
数组中每一位能表示的数字:42亿多
BigInteger能表示的最大数字:42亿多的21亿次方(BigInteger能存下,你的计算机不一定能存下)
所以可以说
BigInteger的最大大小没有上限。
BigDecima 大浮点型
BigDecima是不可变的、任意精度的、有符号的十进制数。
- 用于小数的精确计算
- 可以表示较大的小数
1 构造方法
public BigDecima(String val)
//获取指定大小数
通过静态方法获取BigDecima的对象
public static BigDecima valueOf(double val)
静态方法注意:
- 如果传递的是[0, 10]整数,不会创建对象
public class Demo {
public static void main(String[] args) {
BigDecima bd1 = BigDecima.valueOf(10);
BigDecima bd2 = BigDecima.valueOf(10);
System.out.println(bd1 == bd2); //true
BigDecima bd3 = BigDecima.valueOf(10.0);
BigDecima bd4 = BigDecima.valueOf(10.0);
System.out.println(bd3 == bd4); //false
}
}
如果数据小于double,就用静态方法valueOf(double val)创建对象;如果数据很大,就用BigDecima(String val)创建对象
2 常用方法
方法 | 说明 |
---|---|
add(BigDecima val) | 加 |
subtract(BigDecima val) | 减 |
multiply(BigDecima val) | 乘 |
divide(BigDecima val) | 除,如果除不尽会报错 |
divide(BigDecima val, int scale, RoundingMode mode) | 除,小数点后保留scale位,RoundingMode舍入模式 |
部分舍入模式:RoundingMode.
模式 | 说明 |
---|---|
HALF_UP | 四舍五入 |
UP | 远离零方向舍入 0.1 -> 1 , -1.2 -> -2 |
DOWN | 向零方向舍入 0.1 -> 0 , -1.2 -> -1 |
CEILING | 向正无穷大方向舍入 0.1 -> 1 , -1.2 -> -1 |
FLOOR | 向负无穷大方向舍入 0.1 -> 0 , -1.2 -> -2 |
3 存储上限
BigDecima内部是将组成小数的各个字符全部拆分,放到一个byte数组里存储的。
如-0.226,byte[] = {‘-’, ‘0’, ‘.’, ‘2’, ‘2’, ‘6’}
理论上:
数组最多能存储的元素个数:21亿多
BigDecima能表示的最大数字长度:21亿多
BigDecima的最大大小没有上限。