原因
JavaScript中Number范围:负2的53次方到正2的53次方,即[-9007199254740992, 9007199254740992]。
可以通过Number.MAX_SAFE_INTEGER,获取js中的number类型最大(安全)值,如果超过这个值,js就会出现精度不准确。
出现问题的场景
浏览器返回数据错误
浏览器对超长number的响应数据,自动转换,造成精度丢失,出现postman请求数据或者whistle抓到的数据,与浏览器返回的数据不一致的问题
string类型转number类型
通过Number()将string转换为number,一旦超过JavaScript中的Number范围,就会出现进度丢失。
总结
- 开发的时候要注意number类型的转换
- 后端返回数据的是number,要注意是不是会超过最大范围,如:一些id、流水号等,需要跟后端沟通转string类型后再传。
注意以上两点,可以避免不必要的坑,还是一时半会排查不出来的。