node获取第三方返回的number数据超过19位精度丢失问题?

问题: 最近在实现一个需求的时候,需要接入第三方的接口,调取第三方接口返回json中的number数据超过19位(2^53-1)导致数据部分位数?

原因: js的number类型有个最大安全值,即2的53次方(9007199254740992),超过这个值就会出现精度丢失的问题。
环境:使用的node、axios进行请求接口
解决方案: 
  方法一:  

    1. 引入json-bigint库 npm install json-bigint

    2. 在axios请求返回的数据,在json传输转化前进行操作返回数据,使用JSONbig.parse会将number类型转化成string  

    const JSONbig = require('json-bigint');
    const service = axios.create({
      transformResponse: [function (data) {
        return JSONbig.parse(data)
      }]
    })
  方法二:
    直接在axios返回的json数据进行正则替换,返回数据如下
    let result = '{"c_id":6839147426382037005,"status":"0"}'
    
const cId = result.match(/[0-9]{19}/)[0] // 正则获取19位数字的值
    result = result.replace(taskId,`"${cId}"`) // 补上双引号转化成字符串
    const data = JSON.parse(result)
 

 

      

 

  

posted on 2020-07-07 20:33  时光不染回忆不淡  阅读(943)  评论(0编辑  收藏  举报

导航