从杰克逊读书时精确的双重损失

时间:2012-09-10 02:05:10

标签: java json jackson

这应该是一个简单的问题,但我在互联网上找不到任何东西。 这是JSON字符串

  {"ratio":2.714,"daily":161.0,"userId":811032853,"topic":"#GOP2012","gender":"Unknow"}

然后当我mapper.readValue(*theString*,*theClass.class*)时,小数点后面的所有数字都会丢失。对于上面的例子,我的比率只有2.0。

我使用的jackson版本是1.9.9,应该是最新版本。

这是否也会发生在其他人身上?感谢大家 :)

theClass 只是一个包含所有这些变量的类。比率的类型是双倍。

2 个答案:

答案 0 :(得分:1)

我会怀疑类定义有些奇怪。杰克逊没有截断双重值,超出了二进制浮点符号的常见警告(即如果你想避免任何舍入错误,你应该使用BigDecimal等),这不足以导致这样的问题。

因此,查看theClass的定义会很有用。如果按照解释的方式发生截断,那肯定是一个错误。

答案 1 :(得分:0)

我没有和JackSon合作过,但你能不能尝试这样的事情......

DecimalFormat df = new DecimalFormat("#.###");
df.format(doubleValue);