【问题标题】:Rounding with BigDecimal用 BigDecimal 舍入
【发布时间】:2014-01-22 20:28:09
【问题描述】:

为什么会失败?

assert 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, RoundingMode.HALF_UP))

失败:

|不满足条件: 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, RoundingMode.HALF_UP)) | | | | 0.0833 错误 0.08333 精度=4 roundingMode=HALF_UP

【问题讨论】:

  • 仅供参考,我已删除 Java 标记,因为此代码是纯 Groovy。但这是 Java 中的等效效果:ideone.com/jaMhvV
  • 在 Java 中这应该会失败,因为您使用的是 == 而不是 equals。我不知道 Groovy 是做什么的。
  • @PeterLawrey:Groovy == 实际上是 Java equals,预先检查 LHS 不是 null

标签: groovy bigdecimal


【解决方案1】:

我找到了答案。第一部分:

1.0G.divide(12.0G, 4, RoundingMode.HALF_UP)

使用带有scaledivide方法的签名:

BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

但第二个使用 MathContext,它使用 precision,这是另一回事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多