小程序 数字太大导致精度缺失问题

1,156 阅读2分钟

遇到的问题:

服务端传递过来一个json字符串,里面包含一个数字6931928798271278861,但是我这里parse之后就变成了6931928798271279000

是因为js中Number的范围为-9007199254740992~9007199254740992(-2^53 ~2^53),具体的解释大家可以参考www.cnblogs.com/littlestart… 不再赘述了

来吧,开始解决问题

aamFhV.jpg

解决思路:

    1. npm构建第三方包 npm i json-bigint
    1. 使用json-bigint

一·npm构建第三方包(以字节小程序为例)

  • 1.必须要安装有npm,可以去自行下载安装呦
  • 2.打开小程序项目根目录的终端窗口,然后初始化 npm init
  • 3.下载json-bigint :npm i json-bigint --save --production
    • --production 可以减少其他无关包的下载
    • 下载中可能出现名称不合法的问题,重新起个名字就好,最好不要有大写字母,不要有符号
  • 4.在开发者工具:工具栏中工具-->构建Npm
  • 5.这样就可以了,但是可能出现包为空的情况,那就再下载一次试试看吧(我就遇到了(-.-))

二.使用json-bigint

const JSONbig = require('../miniprogram_npm/json-bigint/index.js');//引入npm下载的文件
let data = let result = '{"code":0,"data":{"ids": [6931928798271148897, 6931928798271278861],"success": true}}';//获取的json字符串
var r1 = JSONbig.parse(result);//使用JSONbig的parse,使用数字时一定要toString()合并字符串;
console.log('id1', r1.data.ids[1].toString());//大数字没有变化
console.log('JSONbig结果', JSONbig.stringify(r1));//大数字没有发生变化

ok,这样就解决了大数字精度缺失问题,当然还有就是服务端把数字转化成字符串传递过来就不会有这个困扰了哦

慢慢进步,点点积累!如有问题,温柔指正,虚心接受~

如果对你有帮助,欢迎点赞评论收藏吖~