Java10 大数类

BigInteger java.math包下的 eb49c58f5c476199c60c5560456cbb65_MD5 第二个传入的String如果不是整数,那么就会抛出异常 使用: a1aac52efee6b7328043940e40d8d778_MD5 第三个几乎不少用.radix参数是2,那么就返回二进制的. 3cf13453f3ac13320bc900afa1a77d79_MD5 如果写的是BigInteger("123",2);呢?会抛出异常.

把一个long转换成BigInteger. ff2b85ff34d7f0b8733078d9de72d375_MD5 在内部对常见的数字-16~16进行了优化.内部提前创建了这些数的BigInteger对象,如果多次获取不会创建新的. (ps:实现上,其实是BigInteger类有一个静态代码块,提前创建好了这些对象.) 39c93e05e62a6ce6820bb72411a6229d_MD5 因此,如果这样比较的小的数需要用valueOf(注意,这是静态方法)


如何相加? 4d48c2d54d6948597d23197a37cfe8c2_MD5

各种成员方法 9940c372be1e6cb8bbba74f6dc710224_MD5 其中divideAndRemainder 返回的数组中arr[0]是商,arr[1]是余数

max/min返回的就是原来的较大值/较小值 的对象的引用. intValue之外,其实还有longValue,doubleValue f83277d49460c08dc99624194a7f48b4_MD5


存储原理:

7dd3ee94e9e65e63d1c899795895aed3_MD5 会存储符号位(-1为负数 0 为0 1为int) mag数组存储了各个位数.

mag数组存的都存的是补码.从高位到低位,按4字节分组,从高位的组到地位的组存储. ca6e454311268547dc1fad354b56d6cd_MD5

有上限吗?有的,数组的最大存储元素个数是int的上限.因此是有上限的.


BigDecimal小数精确运算 73303db8166b1269d5ff9cec39dbff2d_MD5 因此我们一般用String为参数的构造函数. 7c06ddc9dc4a2e5fb05c713a2652a6bf_MD5 f909f4dac7b346b350a5760eeb032b1e_MD5 注意:只有valueOf(long)才会触发返回创建好的对象. 注意:上述bd6如果打印出来,还是10,不是10.0

6d6189820b70038bc67203241568732e_MD5 两种重载除法的区别: 第一种如果除不尽,那么会抛出异常(如出现10/3的情况) 第二种: - 第二个参数表示小数点后保留几位. - 第三个参数:

老版本(四舍五入)(JDK9以前): 5407b2e98e718395632957e754a1bf8a_MD5 新版本: 8d2463d05879ed5feee98e788e294ae0_MD5

各种舍入模式: 08a2cdb85ea6453e30c0f4be9b841a48_MD5 使用的时候查就行了.


底层原理: 277546f90801813ef6e221bd7ae7f270_MD5 也就是单独存储每一个位数的acill码;(用byte数组的) 如果是负数,那么也会在数组的第一位存储'-'的acill码45;小数点也是存储小数点的acill码46

由于byte数组个数有上限(int的最大值),故小数的长度不能超过这个.