1、解决后端返回Long类型的数据前端精度丢失问题
遇到了后端返回的某个字段的数字太长,导致前端展示的时候数字变成了科学计数法,有些甚至直接展示错误;
原因:
典型的JS精度丢失问题,JS 中的Number类型只能安全地表示 -9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1) 之间的整数,任何超出此范围的整数值都可能失去精度。
解决方案:
我们的项目是Vue + Axios,因此就用Axios举例了,其实操作很简单,别眨眼,看我操作!
1、首先安装 json-bigint 的插件
yarn add json-bigint
//或者
npm i json-bigint
2、接下来,在axios中这样配置就大功告成了
//request.js
import axios from 'axios';
import JSONbig from 'json-bigint';
const JSONbigToString = JSONbig({ storeAsString: true })
const service = axios.create({
timeout: 50_000,
baseURL: '',
transformResponse: [function (data) {
try {
//转换
return JSONbigToString.parse(data)
} catch (err) {
//转换失败就直接按原数据返回
return data;

}
}]
});
2、计算百分数精度问题
computed: {
// 综合评分
averageScore() {
if (this.tableFormData.tableData.length) {
let count = 0;
this.tableFormData.tableData.forEach(item =>{
let weight = this.$currency(item.weight,{precision:4}).divide(100).value
let num = this.$currency(item.score,{precision:4}).multiply(weight).value
count += num
});
return isNaN(count) ? 0 : count.toFixed(2);
} else {
return 0;
}
}
},