背景:
BigInt是一种内置对象,提供了一种方法来表示大于2^53 - 1 的整数,2^53 - 1 为Number可以表示的最大数字,BigInt可以突破限制,可以用任意精度表示整数,超出Number的安全整数限制,也可以安全地存储和操作大整数。
熟悉了BigInt的基本概念之后,好像一直没有应用到实际项目的场景,请问下有哪些场景可以应用到吗?
背景:
BigInt是一种内置对象,提供了一种方法来表示大于2^53 - 1 的整数,2^53 - 1 为Number可以表示的最大数字,BigInt可以突破限制,可以用任意精度表示整数,超出Number的安全整数限制,也可以安全地存储和操作大整数。
熟悉了BigInt的基本概念之后,好像一直没有应用到实际项目的场景,请问下有哪些场景可以应用到吗?
1、高精度时间戳
大于 2^53 - 1 的整数的一个应用场景就是高精度时间戳。精确到纳秒级别的时间戳很常见,经常用来记录特定程序的执行事件,以便进行性能分析,BigInt 可以表示高精度时间戳,在后端性能分析、性能调优中发挥作用。
2、整数 ID
比如 Twitter 的 id 生成服务,当 id 持续增长时,就会超出 JS 的安全范围,因此要求同时冗余地返回字符串型的 id。假如有 BigInt 类型就可以直接使用。
超过9007199254740991
这个整数值后会有用到,常见场景如数据库里存储的bigint
字段值。
Number.MAX_SAFE_INTEGER
// 9007199254740991
Number.MAX_SAFE_INTEGER + 1 == Number.MAX_SAFE_INTEGER + 2
// true
Number.MAX_SAFE_INTEGER - 1 == Number.MAX_SAFE_INTEGER - 2
// false
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
以前这里计算是不建议在前端做的, 但是使用 BigInt 可以避免浮点数精度问题,并提供更准确的计算结果。
使用大精度时间戳,以确保在处理大量并发用户时不会出现 ID 重叠或其他问题。
比如 RSA,要求处理非常大的质数和整数位数,由于错误诊断和处理这些变量超出了 JavaScript 引擎所能够显式表示的范围,因此需要 BigInt 来存储必要的数据。
如果在数据库表中使用数字 ID 并且可能超出
Number
的精度范围,那么可以通过 BigInt 来处理和排序这些信息。这样可以避免将 ID 转换为字符串并在数据库中保留过多的额外字符。以前这里计算是不建议在前端做的, 但是使用 BigInt 可以避免浮点数精度问题,并提供更准确的计算结果。
渲染三维图形可能会涉及到很大的坐标等, 也许要
BigInt
其实总体来看主要是解决了JS的大数与浮点数等的精度问题, 有要求精度的都可以用