You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么TypeScript中的长number类型数值会出现赋值展示错误?

长数字精度丢失原因

JavaScript 中的number类型采用IEEE 754 双精度64位浮点数存储规范,可安全表示的整数范围为 -9007199254740991 ~ 9007199254740991(即 ±(2^53 -1))。你使用的数值44495442002226675已经远超该范围,超出部分的精度会自动丢失,所以会出现末尾数字变为0的情况。

不同工具表现差异的原因
  • Postman展示正常是因为它展示原始响应数值时没有强制转为JS的number类型,保留了原始字符串形式的数值内容
  • 浏览器美化视图异常是因为美化功能会将接口响应的JSON字符串解析为JS对象,解析过程中自动将数字字段转为number类型,触发了精度丢失;原始视图仅展示纯文本响应内容,没有做JSON解析,所以显示正常
解决方案
  • 最优方案:协调后端修改接口定义,将超长数字字段以字符串类型返回,从根源避免前端所有场景的精度问题
  • 若无法修改后端,前端处理响应时替换默认的JSON解析逻辑,使用支持大数字的解析库,将超长数字自动转为字符串或JS内置的BigInt类型处理
  • 若需要对该数值做运算,可使用BigInt类型处理,示例如下:
// 注意BigInt类型需要用字符串传入,否则直接传入number的话已经丢失精度
const lngNumber = BigInt("44495442002226675");
console.log(lngNumber.toString()); // 输出 44495442002226675

内容的提问来源于stack exchange,提问作者pregmatch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:21:03