关于JS的number类型数据过大时会自动四舍五入的bug记录

603 阅读1分钟

今天在和后端联调列表页的时候,发现有一个参数id的值始终查询不到数据,于是我把参数给到后端,让他在数据库查一下,结果告诉我数据库没有这个id,问我搁哪拿的这个数据,我说我还能哪儿去哪儿拿,当然是从你返回的数据里拿的,然后他把数据库里的id截图给我,我看了一眼,发现最后几位数好像自动四舍五入了

id.png

于是我拿着这个发现去给后端battle,你看,你返回的有问题啊,过了一会儿,他回了句

js.png

后面查阅资料发现,JS 提供Number.MAX_SAFE_INTEGER常量来表⽰最⼤安全整数,Number.MAX_SAFE_INTEGER常量表⽰最⼩安全整数:

    `Number.MAX_SAFE_INTEGER : 9007199254740991`
    `Number.MIN_SAFE_INTEGER : -9007199254740991`

确切地说,JS中的Number类型只能安全地表⽰-9007199254740991 (-(2^53-1))9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。

解决方案:

方案一:string去代替number;

方案二:使用BigInt类型

**BigInt 是一种内置对象,它提供了一种方法来表示大于 2^53 - 1 的整数。这原本是 Javascript中可以用Number表示的最大数字。BigInt 可以表示任意大的整数。具体内容可移步MDN-BigInt

好了,今天的分享就到这里,智者不入爱河,建设美丽新中国!!!