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)