在写完项目做测试时,发现前端接收的值,在preview查看时就不一致了,比如后端传值是9012108805013512,而前端接收到的是9012108805013511或者9012108805013513,对,就是多了1或者少了1 ,
后来才发现,js能表示的浮点数的最大值是正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方。但js能够表示整数的范围是正负数的绝对值都不能大于2^53,也就是正负数的绝对值都不能大于9007199254740992,这个数是16位,超过16位的整数就不能精确表示了
Math.pow(2,53) 9007199254740992
Math.pow(2, 53) === Math.pow(2, 53) + 1000; // true
解决方法:1.有个json-bigint的库可以解决这个问题,
2.也可以让后端传id或其他超长值时采用字符串的方式来传
说是两种,但是实测其实差不多,在项目刚起步时可以改,但已成熟的项目有一堆地方要改。。。
或许有更好的解决方式呢。。?
闭眼打键盘