已解决
使用json-bigint库处理后端返回数值型数据精度丢失问题
来自网友在路上 171871提问 提问时间:2023-10-28 21:39:45阅读次数: 71
最佳答案 问答题库718位专家为你答疑解惑
目录
- 问题描述
- 问题分析
- 解决办法
- 参考文章
问题描述
Java后端接口返回17位长度的数值,JavaScript前端接收错误
例如:
console.log(10976458979374929)
10976458979374928
可以看到,输出的数值不一致,精度丢失了
问题分析
查看JavaScript Number类型的数值范围,16位长度
console.log(Number.MIN_SAFE_INTEGER)
-9007199254740991console.log(Number.MAX_SAFE_INTEGER)
9007199254740991
查看Java Long类型的数值范围,19位长度
System.out.println(Long.MIN_VALUE);
//-9223372036854775808System.out.println(Long.MAX_VALUE);
// 9223372036854775807
比较
文档
- https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number
- https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html
解决办法
- 方式1:数据库字段类型修改为字符串
- 方式2:后端返回数据将Long类型转为字符串
- 方式3:前端json反序列的之前对字符串处理
方式1和方式2需要和后端沟通,如果沟通无效,也可以前端自行处理
一个简单的方式是使用第三方库 json-bigint 来解析json
-
npmjs:https://www.npmjs.com/package/json-bigint
-
github: https://github.com/sidorares/json-bigint
安装
npm i json-bigint
使用示例
import JSONbig from "json-bigint";// 后端返回的数据
const data = '{"uid": 10976458979374929, "age": 20}';// 使用内置JSON解析
console.log(JSON.parse(data));
// { uid: 10976458979374928, age: 20 }// 使用第三方库JSONbig解析
const JSONbigToString = JSONbig({ storeAsString: true });console.log(JSONbigToString.parse(data));
// { uid: '10976458979374929', age: 20 }
参考文章
- 线上紧急Bug:80%前端可能会遇到的数据精度问题
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"使用json-bigint库处理后端返回数值型数据精度丢失问题":http://eshow365.cn/6-27125-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【蓝桥每日一题]-前缀和与差分(保姆级教程 篇2)#差分序列
- 下一篇: vue中时间控件