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的过程中数字精度发生了丢失。
- 解决方法一:将starttimeseconds设置为string类型的。这个的话来回转换的 是字符串,不存在数值丢失。
- 解决方法二:protoful.js的long.js解决。网上看了多种,但是操作起来好像也不行,这个没有进行深入实践。
如果觉着不错,可以关注我的公众号 lovejsandcss
新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐

所有评论(0)