js中Numer类型最大值9007199254740991,精度丢失问题解决

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)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值