大数字的问题
JS使用64位的浮点数存储数字,浮点数分为符号、指数、尾数三个部分
例如-114,转换成二进制数就是-1110010,再转换成科学计数法就是-1.110010 * 10^110^,其中,-是符号、110是指数、110010是尾数
尾数决定了数字的精度,最多能存52位精度,不足向前补0、超过向后截断
为了最大限度利用这52位,通常会省略小数点前的那个1,也就是最多可以代表53位的数
也就是说,能被完整存储的最大数字为2^53^-1,即9007199254740991,也就是Number.MAX_SAFE_INTEGER,最大安全整数
如果数字超过了最大安全整数,那么它的精度就可能丢失,可能出现难以预料的问题
1 | // 正常结果将会是100......0和100......1,但是唯一不同的最后一位被截断了,剩下就相同了 |
评论