json解析存在的精度丢失问题详解

今天遇到了一个大坑。这个问题调查了很久。一直以为是jar包或者哪里转错了。自己动手实验了一下。发现是json 、 javascript 和java数值范围不同引起的。

{
“boolean”: true,
“starttimeseconds”:9223372036854122112,
}
上边是一段json格式的字符串。经由json编辑器转成json对象的结果是starttimeseconds:9223372036854122000;
造成这个现象的主要原因是js中的number数值类型默认是双浮点精度类型即相当于double,64位。js中只有53位用来存数据,数据范围为 -2^53 - 2^53 ,剩余的用来存指数等。而java中的starttimeseconds的类型为long类型 数值范围为 -263–263。也就是说java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下。所以在js中字符串转成js中的object的过程中数字精度发生了丢失。

  1. 解决方法一:将starttimeseconds设置为string类型的。这个的话来回转换的 是字符串,不存在数值丢失。
  2. 解决方法二:protoful.js的long.js解决。网上看了多种,但是操作起来好像也不行,这个没有进行深入实践。

如果觉着不错,可以关注我的公众号 lovejsandcss

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值