BigInt 解决 Number 类型大整数精度丢失问题,通过加 n 或 BigInt() 创建,支持大整数运算但不可与 Number 混用,适用于高精度场景如 ID 处理、金融计算,但不支持小数、Math 方法及 JSON 序列化。

JavaScript 中的 BigInt 是为了解决常规 Number 类型在处理大整数时精度丢失的问题而引入的。JavaScript 的 Number 类型基于 IEEE 754 标准,使用双精度浮点数表示,安全整数范围是 -(2^53 - 1) 到 2^53 - 1(即 -9007199254740991 到 9007199254740991)。超出这个范围的整数无法被精确表示,导致计算错误。
BigInt 是一种内置对象,表示大于 2^53 - 1 的整数。创建 BigInt 的方式是在整数后加 n,或调用 BigInt() 函数:
const bigNum = 1234567890123456789012345n;const alsoBig = BigInt("1234567890123456789012345");BigInt 支持常见的数学运算,如加、减、乘、除和取余,但不能与普通 Number 混合运算,否则会抛出错误:
10n + 2 ❌ 报错:不能混合 BigInt 和 Number10n + BigInt(2) ✅ 正确在金融计算、科学计算或处理 ID(如数据库主键、Twitter Snowflake ID)等场景中,数值可能非常大。使用 Number 类型会导致精度丢失:
立即学习“Java免费学习笔记(深入)”;
console.log(9007199254740992 === 9007199254740993); // true —— 实际上不相等,但 JS 无法区分这种“舍入”现象会使程序产生难以察觉的 bug。使用 BigInt 可以避免这类问题:
console.log(9007199254740992n === 9007199254740993n); // false —— 精确比较尽管 BigInt 解决了大整数精度问题,但它也有局限性:
1.5n 语法错误Math 对象方法一起使用(如 Math.sqrt())Number 运算,必须显式转换JSON.stringify({id: 123n}) 会报错)0n 被视为假在需要高精度整数的场景中优先使用 BigInt:
例如,接收一个大 ID 时:
const data = { id: "9007199254740992" }; // 字符串形式接收
const idAsBigInt = BigInt(data.id); // 安全转换
基本上就这些。BigInt 是 JavaScript 在数值精度方面的重要补充,合理使用能有效避免大数运算中的陷阱。注意类型隔离和兼容性即可。
以上就是JavaScript BigInt与数值计算精度的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号