JSON.parse()大整数精度丢失的问题和解决方法

小白终成大白


文章目录


前言

调试代码时候感觉出鬼了

接口给我的

javascript 复制代码
console.log(extra);
const extraObj = JSON.parse(extra)
console.log(extraObj);
```javascript
在这里插入代码片

我打印出来

{"contentId":1996543874746863617,"commentId":1996544548632276994}

明明是3617打出来就是3600

打出来就是3600

我天呐 当时脑子嗡一下 怎么事 出鬼了

一、原因

数字在JSON.parse之后被近似了!

这是因为JavaScript的Number类型有精度限制。JavaScript的Number类型使用IEEE 754双精度浮点数,它的精度范围大约是-253到253之间。超过这个范围的整数可能无法精确表示,会被近似处理。后端数据提供的contentId是1996543874746863617,这个数字明显超过了2^53(约9e15),所以在JSON.parse的时候会被近似。

二、解决办法

可以把大数字作为字符串处理,或者使用BigInt类型

1.引入库

c 复制代码
pnpm add json-bigint

我这个项目不想引入新的库了 所以选择了第二种

2.字符串处理

c 复制代码
// 处理大整数精度丢失问题:将JSON字符串中的大整数转换为字符串
		const safeJsonStr = extra.replace(/"contentId":(\d+)/g, '"contentId":"$1"').replace(/"commentId":(\d+)/g, '"commentId":"$1"');
		const extraObj = JSON.parse(safeJsonStr)
		console.log(extraObj);
		const id = extraObj.contentId
		console.log(id);

这回打印就没有出现问题了


总结

记录一下自己的问题 加深处理印象

感谢观看

相关推荐
东方-教育技术博主8 小时前
论文全文翻译_通过VR课堂适应性反馈提升职前教师注意能力
json·vr
Random_index13 小时前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json
寻道模式14 小时前
【开发心得】GA + 飞书频繁报错被忽略的“元凶”
json·飞书·ga
SelectDB技术团队15 小时前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·clickhouse·elasticsearch·json·apache·日志分析·apache doris
Dontla18 小时前
Claude Code如何管理自动执行的命令?(/permissions命令、settings.json、settings.local.json、命令权限)
json
Amy187021118231 天前
UL证书只是起点——智能电表出口北美,真正的考验在量产之后
json
SelectDB2 天前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·json·agent
前网易架构师-高司机2 天前
带标注的21种中药材识别数据集,识别率73.8%数据集,2237张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·中药·药材·中草药
我是大猴子2 天前
Java里的Json
json
PixelBai2 天前
JSON查看器实际应用场景案例
json