为何BigInt(16795000205095893097)与预期值不相等?
为什么BigInt(16795000205095893097)的结果和输入值不符?
问题核心在于JavaScript的Number类型精度限制:
- JavaScript中的普通数字是双精度64位浮点数,它能精确表示的最大整数是
2^53 - 1(即9007199254740991)。 - 你传入的
16795000205095893097远大于这个阈值,当你把它作为数字传给BigInt()时,该数值已经被Number类型做了近似处理,丢失了部分精度,变成了16795000205095892992。 BigInt()接收的是这个近似后的数值,最终转换出的结果自然和原数不一致。
正确写法
要绕过Number类型的精度丢失,直接把数字以字符串形式传给BigInt()即可:
const unsigned64bitPrime = BigInt("16795000205095893097") console.log('unsigned64bitPrime = ', unsigned64bitPrime); // 输出:unsigned64bitPrime = 16795000205095893097n
内容的提问来源于stack exchange,提问作者Catfish
相关产品推荐
相关产品推荐

