使用JavaScript的parseInt/Number转换大数字返回值异常求助
为什么字符串"6145390195186705543"转数字后变成6145390195186705000?
这是因为JavaScript的Number类型基于IEEE 754双精度浮点数标准,它的有效精度上限是53位二进制位,对应的十进制最大精确整数为2^53 - 1(即9007199254740991)。
你输入的字符串对应的数值6145390195186705543,已经超出了这个精确范围。双精度浮点数无法精确存储超过该范围的整数,转换时会自动近似到最近的可表示值,也就是你看到的6145390195186705000。
另外,parseInt()虽然负责解析整数,但它的返回值依然是Number类型,同样受限于双精度浮点数的精度限制。调整基数只是改变字符串的解析规则,不会突破浮点数的存储上限,所以结果一致。
验证代码:
// 双精度浮点数能精确表示的最大整数 const maxSafeInteger = 2 ** 53 - 1; console.log(maxSafeInteger); // 输出 9007199254740991 // 目标数值与最大安全整数比较 const targetNum = 6145390195186705543; console.log(targetNum > maxSafeInteger); // 输出 true,确认超出精确范围
内容的提问来源于stack exchange,提问作者Kimimomo
相关产品推荐
相关产品推荐

