在从JAVA中实现的restful服务获取JSON响应时,我观察到以01结尾的长数据类型值四舍五入为00。 例如:
长值,
12345123459876501 is returned as 12345123459876500 (last digit rounded to 0)
12345123459876502 is returned as 12345123459876502
12345123451234501 is returned as 12345123451234500 (last digit rounded to 0)
12345123451234502 is returned as 12345123451234502
有人可以帮我理解为什么只有以01结尾的值会四舍五入为00?
答案 0 :(得分:5)
json.org中定义的JSON只有一个名为“number”的数字类型。如此多的Java JSON解析器将其映射到double
类型,无论它是否用于整数,长整数的浮点数。但是,double
只能容纳15-16位有效数字,而long
可以存储更多数字。因此,如果您的long
值的位数超过该值,则当JSON解析器在long
和double
之间进行转换时,精度会丢失,这会将01
后缀更改为{{ 1}}。如果您想确保保留所有数字,则必须将字段类型更改为00
并自行处理解析为String
。
答案 1 :(得分:0)
使用Java BigInteger并在json中正确映射长整数。