当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何理解 BigInt(9223372036854775807) ?

何聪
2023-10-21

期望 BigInt(9223372036854775807) === 9223372036854775807

实际上 BigInt(9223372036854775807) //9223372036854775808n

共有2个答案

伯茂才
2023-10-21

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

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

顾俊哲
2023-10-21

这里出现了一个误解。你期望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

 类似资料:
  • 如果使用了 a 类型,那么当设置 c 的等号后, 是无法触发 'base' | 'delete' 的提示的,因为类型被 string 覆盖了。但是如果使用的是 b 的类型设置,可以触发 'base' | 'delete' 的类型提示,当然依然可以设置为 string 类型。string & {} 这样的实现效果应该如何理解?

  • 本文向大家介绍如何理解JavaScript模块模式?,包括了如何理解JavaScript模块模式?的使用技巧和注意事项,需要的朋友参考一下 JavaScript本机不支持类,因此使用Module模式。这是为了将公共,私有方法和变量存储在单个对象中。为了使用和理解它,我们将解决匿名关闭问题,以显示由于未达到18岁年龄标准而导致的选民资格丧失。 示例 您可以尝试运行以下代码来了解JavaScript模

  • 请问如何理解: 鼠标移动到现实类型: 完全看不懂如下的信息:

  • A recent addition This is a recent addition to the language. You can find the current state of support at https://caniuse.com/. BigInt 是一种特殊的数字类型,它提供了对任意长度整数的支持。 创建 bigint 的方式有两种:在一个整数字面量后面加 n 或者调用 Bi

  • 案例地址 其中的 a划弧终点坐标为什么是 -.1 0, 而不是 0 0,为什么使用小a和小z,而不是大A和大Z ?

  • org.PostgreSQL.util.psqlException:错误:操作符不存在:integer=bytea 将null绑定到准备好的语句时出现Postgres bytea错误 Hibernate本机查询可选参数抛出'operator不存在:bigint=bytea' ...还有更多。 下面是其中一个控制器: 这是我从邮递员那里寄来的请求: 下面是我的本机查询存储库: 请帮助我的想法和可能的