为何将字符串'9333852702227987'转为数字时结果自动加1?
大数转换偏差的原因解析
这是JavaScript中Number类型的精度限制导致的问题,核心原因如下:
- JavaScript的
Number类型基于IEEE 754双精度浮点数标准,该标准仅能精确存储二进制有效位数≤53位的数值(对应十进制约16-17位)。 - 你输入的数值
9333852702227987是16位十进制数,转换成二进制后其有效位数超过了53位,无法被Number类型精确存储。 - 当执行各类转换操作时,JavaScript会自动将这个数近似到最近的可表示浮点数,而
9333852702227987附近的可表示浮点数恰好是9333852702227988,所以无论用Number()、parseInt()、num1*1还是各类Math方法,最终结果都会是这个近似值。
如果需要精确处理这类超出53位精度的大数,建议使用JavaScript的BigInt类型,例如:
BigInt('9333852702227987') // 输出 9333852702227987n
内容的提问来源于stack exchange,提问作者Muhammad Ali Malekzadeh
相关产品推荐
相关产品推荐

