javascript 处理大数字需避免 number 类型解析,应由后端统一以字符串形式传输(如 "id": "123456789012345678901234567890"),前端保持字符串接收;整数运算用 bigint(bigint("...")),小数运算用 decimal.js 或 big.js;禁用 parseint/number() 转换,时间戳超范围也建议传字符串。

JavaScript 对后端返回的大数字(如超过 253 - 1 ≈ 9007199254740991)做防精度丢失处理,核心是**避免用 Number 类型直接解析**,改用字符串接收 + 专用大数类型(如 BigInt 或第三方库)进行后续操作。
后端传数时统一用字符串格式
这是最稳妥、兼容性最好、前后端协作成本最低的方式。后端在 JSON 中不传原始数字,而是将大整数(如订单号、用户 ID、时间戳等)序列化为字符串:
{
"id": "123456789012345678901234567890",
"amount": "999999999999999999999999"
}前端用 JSON.parse 接收后,字段保持为字符串,完全规避精度问题。后续如需计算或比对,再按需转换。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
需要计算时优先用 BigInt(仅限整数)
若业务确实要对大整数做加减乘除等运算(且确定无小数),可用原生 BigInt:
- 字符串转 BigInt:用
BigInt("123456789012345678901234567890")(注意:不能用new BigInt(),也不能传 Number) - 运算符支持:
+、-、*、**、%,但/是向下取整除法 - ⚠️ 注意:
BigInt不能和Number混合运算,会报错;比较时建议都转成同类型(如a > b只在同为 BigInt 时安全)
涉及小数或复杂运算时用 decimal.js 或 big.js
如果大数字带小数(如金额 1234567890123.456789)、需要四则运算、舍入、科学计数等,推荐使用成熟库:
-
decimal.js:功能全、精度可控、API 清晰,支持任意精度十进制运算 -
big.js:更轻量(~6KB),适合只做基础高精度计算的场景 - 用法示例:
new Decimal("12345678901234567890.123456789").plus("0.987654321")
避免踩坑的关键细节
- 不要用
parseInt(str)或Number(str)解析大数字字符串——会立刻丢失精度 - 慎用
JSON.parse(jsonStr, (k, v) => /id|amount/.test(k) ? String(v) : v)自动字符串化,容易漏字段;建议后端明确约定并文档化 - 时间戳若超
Date.now()范围(约 ±273972年),也建议传字符串或 BigInt,避免毫秒级精度丢失 - 控制台打印 BigInt 会显示
123n,不影响逻辑,但调试时注意类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










