使用axios请求,返回long类型数字精度丢失问题处理

211 字
1 分钟
使用axios请求,返回long类型数字精度丢失问题处理

问题描述#

服务器后端返回 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)
    },
    ]
使用axios请求,返回long类型数字精度丢失问题处理
https://wangxiang.website/posts/工作/js-long/
作者
翔子
发布于
2024-01-02
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
翔子
前端开发工程师
公告
博客已从 VitePress 迁移到 Astro + Firefly 主题,223 篇文章全部保留。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
221
分类
9
标签
28
总字数
411,914
运行时长
0
最后活动
0 天前

文章目录