从Jackson读取时,双精度的精度丢失

3
这应该是一个简单的问题,但我在互联网上找不到任何相关信息。这是JSON字符串。
  {"ratio":2.714,"daily":161.0,"userId":811032853,"topic":"#GOP2012","gender":"Unknow"}

当我使用mapper.readValue(*theString*,*theClass.class*)时,小数点后面的数字都会丢失。例如上面的例子,ratio只有2.0。 我使用的jackson版本是1.9.9,应该是最新版本。 这种情况还发生在其他人身上吗?谢谢大家 :) theClass只是一个包含所有这些变量的类。ratio的类型是double。

1
请展示 TheClass 的源代码。 - Stephen C
@StephenC 它已经更新了。但是这个 class 里面没有什么东西。唯一有用的可能就是变量 ratio 的类型是 double。 - Simon Cai
2个回答

1
我会怀疑类定义中有一些奇怪的问题。Jackson不会截断双精度值,除了二进制浮点表示法的常规警告(即,如果您想避免任何舍入误差,应该使用BigDecimal等),这些警告不足以引起此类问题。
因此,查看theClass的定义将非常有用。如果确实发生了如上所述的截断,那么肯定是一个错误。

0

我没有使用过JackSon,不过你可以尝试类似这样的方法....

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接