uniapp uni.request 数字过长精度丢失问题处理
接口返回数字 为1067722413883658240 正确但是 拿到后打印出来的结果是1067722413883658200 错误原因是数字过长被四舍五入了解决思路1 (放弃)尝试让后台返回时 改成string后台拒绝 且 沟通中一直表示传的是string 很是尴尬2 (放弃)找uni 官网请求插件 主要想找一个带有拦截器的 因为考虑 在拦截器里拿到的应该是 精度正确的翻看了3,4个插件 发现底
接口返回数字 为
1067722413883658240 正确
但是 拿到后打印出来的结果是
1067722413883658200 错误
原因是数字过长被四舍五入了
解决思路
1 (放弃)尝试让后台返回时 改成string 后台拒绝 且 沟通中一直表示传的是string 很是尴尬
2 (放弃)找uni 官网请求插件 主要想找一个带有拦截器的 因为考虑 在拦截器里拿到的应该是 精度正确的 翻看了3,4个插件 发现底层还是uni.request 都是二次封装的 拦截器 所以
3 (实现)再次翻看uni.reques文档 注意到 dataType 参数 表示返回时自动进行 json.parse处理 所以猜测是这个原因 于是想尝试 换个参数 但文档中并未提到 于是 先将参数注释 结果失败 后尝试 参数改为 string 发现 成功
4 故 单独封装了一个请求 (也可以考虑统一封装后 通过参数进行设定) 将datatype参数设置为sting后 进行了replace 替换 后 再次手动转成json 代码如下
let data = JSON.parse(dataStr.replace(/gridId\":(\d+)/g,"gridId\":\"$1\""));
replace 是将 里面的数字 前后 添加 引号 后 进行 json.parse
记录上述过程 是防止 其他人 尝试一些已经尝试过且失败的方法 在这里做个记录
更多推荐
所有评论(0)