java - jackson 是否会错误地序列化任何货币值(value)?

标签 java json floating-point jackson precision

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

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

为了提供一些背景信息,我目前正在编写一些内容,该内容将采用一些精确的货币值,然后以 JSON 形式将所述值直接传递到另一个服务,而不对它们进行任何可能会放大不精确性的计算。为了安全起见,我可能会使用 BigDecimal,但我想知道是否可以使用 double 来逃脱。

最佳答案

你应该没问题:你可以安全地round-trip up to 15 significant figures从小数到 double ,再回到小数,或者以货币计算,精度高达 99 万亿美元到 1 美分。

关于java - jackson 是否会错误地序列化任何货币值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259930/

相关文章:

math - float 学有问题吗?

java - 无法使用 java 类访问和运行批处理文件命令

java - 如何在java上使用 "toString"方法读取/恢复保存在文件上的X509Certificate

json - 嵌套 JSON Feed 返回错误

java - 使用 Jackson 库直接将 CSV 文件转换为 JSON 文件

C 运行 'Debug' 和 'Start without debug' 时变量的不同答案

C# float max 解析错误

java - 从java中的字符串数组中选择一个随机项目

java - MPAndroidChart - 如何最好地将 X 轴值设置为字符串/日期?

javascript - 使用 Datatables 从 JSON 数据构建 HTML 动态表