1***@qq.com
1***@qq.com
  • 发布:2023-10-19 11:36
  • 更新:2023-10-19 11:36
  • 阅读:1035

解决JSON.parse大数字转换精度丢失问题

分类:uniCloud

因为js语言问题,数字大于16位后,会丢失16位以后的数字:比如声明 let n = 1234567890123456789;打印n之后会显示1234567890123456800;
同理JSON.parse将json字符串转为Object时,如果其中有大数字的值,也会发生精度丢失问题。
使用uni.request或uniCloud.httpclient.request 接收远程api返回数据时,如果返回数据里有大数字,并且直接设置了返回数据类型为json的话,则不能正常接收大数字。
此时就需要先接收为纯文本,也就是dataType = "text",再通过脚本匹配大数字后,给其加上字符串的引号,再进行JSON.parse的转换。这样就能正确接收大数字值了。

下面是转换函数实现:

// 解决大数字转换丢失问题  
function jsonParse(text) {  
    text = text.replace(/([^"'\d])(\d{16,})/g, "$1\"$2\"")  
    return JSON.parse(text);  
}
0 关注 分享

要回复文章请先登录注册