今天遇到了一个大坑。这个问题调查了很久。一直以为是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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐