【问题标题】:scala BigDecimal Gson json formattingscala BigDecimal Gson json 格式
【发布时间】:2019-09-20 10:19:34
【问题描述】:

如果我在 Java 中有以下代码

        Gson gson = new Gson();
        System.out.println(gson.toJson(new BigDecimal(10).setScale(2, RoundingMode.HALF_UP)));

它打印 10.00,正是我想要的。

但是,如果这次我在 scala 中有相同的代码,

println(new Gson().toJson(BigDecimal(10).setScale(2, RoundingMode.HALF_UP)))

打印出来:

{"bigDecimal":1.00,"mc":{"precision":34,"roundingMode":"HALF_EVEN"},"computedHashCode":1565550863}

这不是我想要的。如何修复它以仅打印 10 个?我假设我必须以某种方式为 scala 配置 Gson 库。

【问题讨论】:

    标签: json scala gson


    【解决方案1】:

    在第一种情况下,您可能正在使用 java.math.BigDecimal,而在其他情况下,您正在使用 scala.math.BigDecimal

    您也可以在 Scala 中使用 Java BigDecimal,例如

    import java.math.{BigDecimal => JBigDecimal}
    println(new Gson().toJson(new JBigDecimal(10).setScale(2, RoundingMode.HALF_UP)))
    

    这只会打印您想要的10.00


    顺便说一句,如果你只需要BigDecimal的字符串表示,为什么不直接使用toString呢?

    scala>     println(BigDecimal(10).setScale(2, RoundingMode.HALF_UP).toString)
    10.00
    

    【讨论】:

    • 你说得对,我可以使用 java 的 BigDecimal。但我想知道为什么会这样。至于toString,这里以它为例。我的实际用例是使用 Gson 从包含 scala BigDecimal 的 scala 对象自动创建 json
    • 我最终使用了 java.math.BigDecimal
    • @kk1958 我猜 Gson 对 Java 的 BigDecimal 有一个特例,但 Scala 没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多