Numer类型最大值/最小值
js中数值类型的个最大值(安全值)为9,007,199,254,740,991,是2的53次方-1。在10进制表示下有16位。
Number.MAX_SAFE_INTEGER
//输出:9007199254740991
Number.MIN_SAFE_INTEGER
//输出:-9007199254740991
精度丢失
如果后端给前端的数值类型数据,超过了16位就会出现精度丢失。
精度丢失的问题,可以用js中提供的
JOSN.parse()或者parseInt()来进行验证。
比如,可在浏览器控制台执行如下JSON.parse()语句,来验证一下精度丢失的问题。
JSON.parse('{"id":123,"tid":5410045912865979252}');
//输出:{id: 123, tid: 5410045912865979000} 精度丢失
JSON.parse('{"id":123,"tid":541004591286597925}');
//输出:{id: 123, tid: 541004591286597950} 精度丢失
JSON.parse('{"id":123,"tid":54100459128659792}');
//输出:{id: 123, tid: 54100459128659790} 精度丢失
控制在16位的安全值以内,精度就不会丢失。
JSON.parse('{"id":123,"tid":5410045912865979}');
//输出:{id: 123, tid: 5410045912865979} 精度未丢失
解决办法
首先声明一点,后端应该避免将这么大的数值类型给到前端。
如果实在无法避免,就让后端给前端返回数据的时候,额外增加一个String类型的字段,即通过String类型来向前端传递这种大整数。
//thirdId是18位的大整数
public class Entity {
@json("id")
public long id;
@json("tid") @dbmap(isIndex=true)
public long thirdId;
@json("tsid") @dbmap(isMap=false)
public String thirdStrId;//大整数在前端JSON化的时候精度丢失,转成String返回之
}
//其中thirdStrId=String.valueOf(thirdId)
本文介绍了JavaScript中数值类型的最安全范围,包括最大安全整数(Number.MAX_SAFE_INTEGER)为2的53次方减1,最小安全整数(Number.MIN_SAFE_INTEGER)为该值的负数。当数值超过16位时会出现精度丢失问题,并提供了相应的解决方案。
8317

被折叠的 条评论
为什么被折叠?



