问题描述
与公司后端对接接口时,发现后端的一个定义为Long
类型的数字的ID,返回到前端的时候,想通过这个ID去查询数据的时候发现查不到指定ID的数据,后来才发现是数字的精度丢失了。
比如:当传递的数据是20200615171812341,到前端展示的时候就变成了20200615171812340。
产生原因
Javascript
在对数字进行存储的时候使用了IEEE 754
中规定的双精度浮点数
的数据结构,有效数字为16位十进制,安全的存储空间在 -2^53^ - 1
到2^53^ - 1
,数字范围从-9007199254740991
到9007199254740991
。
在Javascript
中也定义了Number.MAX_SAFE_INTEGER
为数字使用的最大安全值,当超过这个范围时就会出现数字精度丢失的问题。
在浏览器打印的时候也会出现这样的问题
解决办法
协商让后端的同事将这个Long
类型的字段转换成String
类型的就解决了。