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

来源:互联网 发布:淘宝手机版千牛工作台 编辑:程序博客网 时间:2024/06/10 13:09

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

{
“boolean”: true,
“starttimeseconds”:9223372036854122112,
“null”: null,
“number”: 11222222222222222223,
}
上边是一段json格式的字符串。经由json编辑器转成json对象的结果是starttimeseconds:9223372036854122000 ;
造成这个现象的主要原因是js中的number数值类型是双浮点精度类型即double。而java中的starttimeseconds的类型为long类型。也就是说java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下。所以在js中字符串转成js中的object的过程中数字精度发生额了丢失。
解决方法一:将starttimeseconds设置为string类型的。这个的话来回转换的 是字符串,不存在数值丢失。
方法二:protoful.js的long.js解决。

0 0
原创粉丝点击