JavaScript 如何处理 JavaScript 大数字场景

JavaScript处理大数字需分场景:整数超安全范围(9007199254740991)用BigInt;小数精度敏感场景(如金额)用decimal.js或bignumber.js;JSON传大整数须转字符串防丢失;中间计算可接受可控误差。

javascript 如何处理 javascript 大数字场景

JavaScript 处理大数字不能靠“统一方案”,得按数据类型和业务目标分开应对:整数超限用 BigInt,小数精度敏感(如金额)用 decimal.js 或 bignumber.js,JSON 传大整数必须防解析丢失,中间计算可接受可控误差。

整数超安全范围:用 BigInt,但别混 Number

Number.MAX_SAFE_INTEGER 是 9007199254740991,超过就不可信。比如 ID、哈希值、计数器超出此值,必须用 BigInt:

  • 创建方式:直接写 12345678901234567890123n,或调用 BigInt("123...")
  • 运算严格隔离:不能 10n + 5,要写成 10n + BigInt(5)10n + 5n
  • 支持 + − * ** % > & | ^,但除法 / 会自动向下取整(无小数)
  • JSON 不支持 BigInt,序列化前需转字符串:id.toString();反序列化后手动恢复

小数精度关键场景:别用 Number,用 decimal.js 或 bignumber.js

0.1 + 0.2 !== 0.3 是浮点固有缺陷,金融、科学计算等不能妥协:

  • 统一用字符串初始化:new Decimal("0.1").plus("0.2"),传 0.1 仍带原始误差
  • decimal.js 功能最全(支持 sin/log/pow/rounding mode),适合银行复利、物理模拟
  • bignumber.js 更轻量、兼容老环境,API 简洁,适合前端嵌入和长期维护项目
  • 避免已停更的 big.js(注意拼写),也别用 parseFloat((x).toFixed(n)) 这类伪精度封装

后端传大数时:JSON 解析是第一道失守点

标准 JSON.parse 会把超长数字(如 ID、时间戳)直接转成不精确的 Number:

立即学习“Java免费学习笔记(深入)”;

  • 最优解:后端把大整数字段序列化为字符串,如 {"id": "90071992547409912345"}
  • 次优解:前端用 json-bigint 替代原生 JSON:JSONbig.parse(jsonStr),支持 useNativeBigInt 选项
  • 校验前置:输入或响应后立刻用 Number.isSafeInteger() 检查,不安全就拒收或转 BigInt

性能敏感环节:允许局部降级,守住关键节点

不是所有计算都要 100% 精确,动画、日志聚合、中间态可以权衡速度:

  • 展示用 .toFixed(2) 可以,但注意它返回字符串,且 1.005.toFixed(2) === "1.00"(非四舍五入)
  • 快速保留两位小数:用 Math.round(x * 100) / 100,比调库快一个数量级
  • 大数组求和/均值:用 for 循环代替 reduce,避免闭包开销
  • 只对用户可见、影响决策的值(付款金额、库存余量)做严格精度保障

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xinjizixun/126967.html

iPhone 15电池容量多少毫安 苹果15全系列续航对比
上一篇 2026-07-19 17:13
如何利用 Performance API 监测性能指标变化
下一篇 2026-07-19 17:13

相关推荐