今天又是收获的一天~~
关于学习大数操作来源于一道编程题:以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
当时我看到这道题第一反应就是把两个串通过nteger.valueOf()转为Integer然后想加,但事实并没有这么简单,不然怎末叫大数相加呢~
好了,来进入正题
我们知道在Java中,存储整行最大的范围就是long类型----64比特位,但是如果大于这个值又改怎末办?
同样的,对于浮点数double类型的精度只能达到16为,要是精度高于16位呢?
这里就引入了大数操作——BigInteger、BigDecimal;他们都在java.math包下,并且都是以字符串的形式存储的。
BigInteger
java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个 int[ ] 数组来模拟一个非常大的整数;
大数也可以转为基本类型,但是如果超出了基本类型的范围,转换时将丢失高位信息,即结果不一定是准确的。
BigInteger和Integer、Long一样,也是不可变类,并且也继承自Number类。因为Number定义了转换为基本类型的几个方法:
- 转换为byte:byteValue()
- 转换为short:shortValue()
- 转换为int:intValue()
- 转换为long:longValue()
- 转换为float:floatValue()
- 转换为double:doubleValue()
如果需要准确地转换成基本类型,可以使用intValueExact()、longValueExact()等方法,在转换时如果超出范围,将直接抛出ArithmeticException异常。
代码:
BigInteger i1 = new BigInteger<