杰克逊会错误地序列化任何货币价值吗?

时间:2018-03-13 15:25:57

标签: java json floating-point jackson precision

众所周知,像0.1这样的数字不能完全用浮点表示。如果您尝试获取0.1的字符串表示,则会看到“0.1”,因为Java(以及许多其他语言)在转换为字符串时会为您执行一些隐式舍入。更令人惊讶的是,当将0.1序列化为JSON时,即使将其序列化为数字而不是字符串类型,您仍将获得准确的值。我猜这是因为整个JSON基本上是一个字符串,因此Jackson只使用双倍量的正常字符串转换。

我的问题如下,是否有任何货币值(两位小数或更少)0< x< 500,000,从精确值转换为double,然后转换为JSON或String,会产生不正确的值。

为了给出一些上下文,我目前正在编写一些将采用一些确切货币值的东西,然后将所述值直接传递给JSON形式的另一个服务,而不对它们进行任何可能放大不精确度的计算。我可能会使用BigDecimal来保证安全,但我想知道是否可以使用double来逃避。

1 个答案:

答案 0 :(得分:0)

你应该没问题:你可以安全round-trip up to 15 significant figures从十进制到双倍,再回到十进制,或者用货币计算,最高可达99万亿到1美分。