2025-11-20 06:36:18
BigDecimal能存特别大的整数,比如存1后面跟30多个零的数。比如存1.8e+308这么大的数,小数点后还能有18位。这个数比手机号位数多得多,手机号最多12位,BigDecimal存整数能到万亿亿亿亿位。不过存整数超过2的53次方就要用科学计数法了,比如存1后面跟30多个零的数,得写成1.234e+300这种形式。存整数最大能到1.23157e+308,这个数是正数最大的值,负数最小是-1.23157e+308。
为什么是这个答案?因为BigDecimal用64位双精度浮点数存储,前52位存有效数字,后面12位存指数。当整数超过2的53次方,就自动用科学计数法表示了。比如存整数1e+30的话,实际存储的是1后面跟30个零,但超过2的53次方(约9e+15)就要用科学计数法了。根据JDK文档,BigDecimal最大整数是1.23157e+308,这个数等于2的负107次方乘以2的1024次方,刚好是64位浮点数的最大值。存整数的时候,如果超过2的53次方,必须用科学计数法,比如存1e+30,这时候指数部分会占用12位,有效数字部分还是52位。比如存整数1后面跟100个零,得写成1e+100,这时候有效数字是1,指数是100。所以BigDecimal存整数最大能到1.23157e+308,这个数等于2的1024次方减1.23157e+308这个数,正好是64位浮点数的最大值。存整数超过2的53次方,比如存1e+30,这时候有效数字部分只有1,指数部分占12位,所以能存这么大的数。存整数的时候,如果超过2的53次方,必须用科学计数法,比如存1e+30,这时候指数部分会占用12位,有效数字部分还是52位。所以BigDecimal存整数最大能到1.23157e+308,这个数等于2的1024次方减1.23157e+308这个数,正好是64位浮点数的最大值。存整数超过2的53次方,比如存1e+30,这时候有效数字部分只有1,指数部分占12位,所以能存这么大的数。
本题链接: