【数字】-大数字精度丢失

最近在做一个项目,遇到id传参不一致问题,id是通过接口获取的,long类型,长度是19,后端反馈前端接口请求传参对不上。后端通过postman请求拿出了证据😂。

原因分析

Javascript普通数字类型的变量,目前最大只能是 小于等于 2的53次方
= 9007199254740992
= Number.MAX_SAFE_INTEGER
= js定义的最大安全值

超过 JS 中能表示的最大安全值之外就要丢失精度了,超过的个数会转成0。

解决办法

方法1:传参前,用字符串格式储存数字,再传入,即可

方法2:使用数学库

目前已经有了很多较为成熟的库,比如math.js,bignumber.js,decimal.js,以及big.js等。我们可以根据自己的需求来选择对应的工具。并且,这些库解决了浮点数的运算精度问题,以及支持大数运算,并且修复了原生toFixed结果不准确的问题。

发表回复

您的电子邮箱地址不会被公开。