Groovy 用大十进制四舍五入

Groovy 用大十进制四舍五入,groovy,bigdecimal,Groovy,Bigdecimal,为什么会失败 assert 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, RoundingMode.HALF_UP)) 在以下情况下失败: | Condition not satisfied: 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, Rou

为什么会失败

assert 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, RoundingMode.HALF_UP))
在以下情况下失败:

| Condition not satisfied: 1.0G.divide(12.0G, 4, RoundingMode.HALF_UP) == 1.0G.divide(12.0G, new MathContext(4, RoundingMode.HALF_UP)) | | | | 0.0833 false 0.08333 precision=4 roundingMode=HALF_UP
我找到了答案。第一部分:

1.0G.divide(12.0G, 4, RoundingMode.HALF_UP)
使用带有刻度的除法签名:


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

FYI,我删除了Java标记,因为这段代码是纯Groovy代码。但在Java中有一个等效效果:。在Java中,这应该失败,因为您使用的是==而不是equals。我不知道Groovy做什么。@PeterLawrey:Groovy==实际上是Java equals,预先检查LHS是否为null。
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)