问题原因:js的number类型有个最大值(安全值)。即2的53次方,为9007199254740992。如果超过这个值,那么js会出现不精确的问题。这个值为16位。
后端传过来number类型的数,值过大,前端无法进行保存。
前端对number类型的数进行计算,计算结果超过最大值时,出现问题。
解决方法:让后端传值时传入string类型,前端拿到string类型的数,通过big-int插件进行计算
npm i big-int
var bigInt = require('big-int');
var a = '21809329030172527984929455273714530';
var b = '75945342116859474629758563482479458';
var c;
// a + b
c = bigInt(a).add(b);
console.log(c.val());
// a - b
c = bigInt(a).sub(b);
console.log(c.val());
// a * b
c = bigInt(a).mul(b);
console.log(c.val());
// a / b
c = bigInt(a).div(b);
console.log(c.val());
// a mod b
c = bigInt(a).mod(b);
console.log(c.val());
// chain usage
c = bigInt('100')
.add('50') // 150
.sub('10') // 140
.mul('2') // 280
.div('11'); // 25
console.log(c.val()); // 25