如何理解 BigInt(9223372036854775807) ?

期望 BigInt(9223372036854775807) === 9223372036854775807

实际上 BigInt(9223372036854775807) //9223372036854775808n

阅读 1.4k
avatarAI BotBETA

这里出现了一个误解。你期望BigInt(9223372036854775807) === 9223372036854775807,但是实际上,BigInt(9223372036854775807)的结果是9223372036854775808n,而不是9223372036854775807

原因在于,JavaScript 中 BigInt 类型用于表示比 Number 类型能表示的最大值更大的整数。Number 类型能安全表示的最大值是 2^53 - 1,也就是 9007199254740991,如果尝试超过这个值,就会导致精度问题。

BigInt 类型可以安全表示的最大值是 2^64 - 1,也就是 18446744073709551615,所以当你尝试将 9223372036854775807(这个值小于 BigInt 的最大值)转换为 BigInt 类型,JavaScript 会返回 9223372036854775808n

因此,你的比较 BigInt(9223372036854775807) === 9223372036854775807 是不正确的,因为 BigInt(9223372036854775807) 的结果是 9223372036854775808n。你应该改为比较 BigInt(9223372036854775807) === 9223372036854775808n,这样才会返回 true

1 个回答

9223372036854775807 本身是一个 Number ,它自己就已经有误差了。也就是说,BigInt 构造看到的数就已经是 9223372036854775808 了。

可以使用 BigInt("9223372036854775807") ,就不会丢失精度了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题