在从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?
json.org中定义的JSON 只有一个名为"number"的数字类型.如此多的Java JSON解析器将它映射到double
类型,无论它是否用于整数,长整数的浮点数.但是,一个double
只能容纳15-16个有效数字,而一个long
可以存储更多数字.因此,如果您的long
数字值大于该值,则当JSON解析器在long
和之间进行转换时,精度会丢失double
,从而将01
后缀更改为00
.如果要确保保留所有数字,则必须将字段类型更改为String
并自行处理解析long
.