Java10 大数类
BigInteger java.math包下的
第二个传入的String如果不是整数,那么就会抛出异常
使用:
第三个几乎不少用.radix参数是2,那么就返回二进制的.
如果写的是BigInteger("123",2);呢?会抛出异常.
把一个long转换成BigInteger.
在内部对常见的数字-16~16进行了优化.内部提前创建了这些数的BigInteger对象,如果多次获取不会创建新的.
(ps:实现上,其实是BigInteger类有一个静态代码块,提前创建好了这些对象.)
因此,如果这样比较的小的数需要用valueOf(注意,这是静态方法)
如何相加?

各种成员方法
其中divideAndRemainder 返回的数组中arr[0]是商,arr[1]是余数
max/min返回的就是原来的较大值/较小值 的对象的引用.
intValue之外,其实还有longValue,doubleValue

存储原理:
会存储符号位(-1为负数 0 为0 1为int)
mag数组存储了各个位数.
mag数组存的都存的是补码.从高位到低位,按4字节分组,从高位的组到地位的组存储.

有上限吗?有的,数组的最大存储元素个数是int的上限.因此是有上限的.
BigDecimal小数精确运算
因此我们一般用String为参数的构造函数.
注意:只有valueOf(long)才会触发返回创建好的对象.
注意:上述bd6如果打印出来,还是10,不是10.0
两种重载除法的区别:
第一种如果除不尽,那么会抛出异常(如出现10/3的情况)
第二种:
- 第二个参数表示小数点后保留几位.
- 第三个参数:
老版本(四舍五入)(JDK9以前):
新版本:

各种舍入模式:
使用的时候查就行了.
底层原理:
也就是单独存储每一个位数的acill码;(用byte数组的)
如果是负数,那么也会在数组的第一位存储'-'的acill码45;小数点也是存储小数点的acill码46
由于byte数组个数有上限(int的最大值),故小数的长度不能超过这个.