VUE - bigint解决前端精度丢失的问题

VUE - bigint解决前端精度丢失的问题

问题描述

java后端long类型的范围

  • -2^63~2^63,即:-9223372036854775808~9223372036854775807,它是19位的。

  • 这个数字可以通过方法获得:Long.MAX_VALUE、Long_MIN_VALUE。

前端JS的数字类型的范围

  • -2^53~2^53,即:-9007199254740991~9007199254740991,它是16位的。

  • 这个数字可以通过方法获得:Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGER。

结论

可见,Java后端的Long宽度大于前端的。雪花算法一般会生成18位或者19位宽度的数字,那么这时就会出问题。

 

1. 安装 插件

yarn add big-int 
yarn add json-bigint
yarn add bignumber.js

 

 

 2. 使用

var bigInt = require("big-int");
 let senceId = bigInt(a.SenceIdString);
 

 

 

import BigNumber from 'bignumber.js';
let senceId= new BigNumber(10000000008214144);

 

 

axios接口调用返回值转换 

import JSONBIG from "json-bigint";

export async function api_GetFilesWithAuth(authStr) {
    const res = await axios({
      url: `${assistURL}/api/TFiles/GetFilesWithAuthAsync`,
      methods: 'get',
      params: {
        authStr: authStr,
      },
      transformResponse: [
        function (data) {
          // 对 data 进行任意转换处理
          debugger;
          const jsonTruns = JSONBIG({
            // storeAsString: true,
          });
          return jsonTruns.parse(data);
        },
      ],

    });
    return res;
  }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end.

posted @ 2024-04-09 11:31  无心々菜  阅读(667)  评论(0编辑  收藏  举报