在json响应中舍入的java long值

时间:2014-04-09 16:45:00

标签: java json

在从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?

2 个答案:

答案 0 :(得分:5)

json.org中定义的JSON只有一个名为“number”的数字类型。如此多的Java JSON解析器将其映射到double类型,无论它是否用于整数,长整数的浮点数。但是,double只能容纳15-16位有效数字,而long可以存储更多数字。因此,如果您的long值的位数超过该值,则当JSON解析器在longdouble之间进行转换时,精度会丢失,这会将01后缀更改为{{ 1}}。如果您想确保保留所有数字,则必须将字段类型更改为00并自行处理解析为String

答案 1 :(得分:0)

使用Java BigInteger并在json中正确映射长整数。