使用axios请求,返回long类型数字精度丢失问题处理
正在加载今日诗词....
2024-01-01

问题描述

服务器后端返回 Long 类型的字段(如 id),传到前端会出现精度丢失,如:164379764419858435,前端会变成 164379764419858000。导致 id 匹配出问题

问题原因

在 JavaScript 中,JSON.parse() 函数用于将一个 JSON 字符串转换为 JavaScript 对象。但是,如果 JSON 字符串中包含的数字太长,超出了 JavaScript 安全数字范围(即小于 -(2^53 - 1) 和 大于(2^53 - 1)),那么 JSON.parse() 可能会导致精度丢失,从而解析出不正确的数字

解决方案

  1. 手动替换,把大数替换成字符串

    JSON.parse('{"a": 1234567890123456789}', (k, v, o) => 	if (o.source > Number.MAX_SAFE_INTEGER) return o.source
        else return v
    })
    
  2. 使用第三方库 json-bigint

    import JSONBig from 'json-bigint'
    //创建一个axios实例
    const instance = axios.create({
      // withCredentials: true,
      timeout: 5000, //5秒
    })
    // 处理返回数据
    instance.defaults.transformResponse = [
      (data: any) => {
        return JSONBig.parse(data)
      },
    ]
    

京ICP备2022027737号
Copyright © 2022 - present @wangxiang

  • ☀️
  • 🌑