JavaScript中使用BigInt转换大数为何自动加1?
关于BigInt转换结果不符合预期的问题
先看你给出的代码:
BigInt(9223372036854775807) // 9223372036854775808n
问题的核心原因是:
- 你传入
BigInt()的参数是Number类型,而Number存在精度上限。 - Number遵循IEEE 754双精度浮点数标准,能精确表示的最大整数是
2^53 - 1(即9007199254740991)。9223372036854775807已经超出这个范围,所以JavaScript解析这个数字字面量时,会自动将其近似为最近的可精确表示的整数9223372036854775808,再转成BigInt自然就是这个值。
要得到预期的9223372036854775807n,有两种正确写法:
- 使用BigInt字面量:
9223372036854775807n // 9223372036854775807n - 传入字符串形式的数字给
BigInt():BigInt("9223372036854775807") // 9223372036854775807n
内容的提问来源于stack exchange,提问作者mpliang
相关产品推荐
相关产品推荐

