【发布时间】:2019-06-28 10:33:52
【问题描述】:
我读到 BigDecimal 是用 Java 表示货币时要走的路。
但我不明白为什么我的一个单元测试失败并显示以下消息:
org.opentest4j.AssertionFailedError:
Expected :0.40
Actual :0.4
“实际”值是BigDecimal.valueOf(0.398).setScale(2, RoundingMode.HALF_UP) 的结果。
所以我想我的问题有两个部分:
- 为什么这些值不相等?
- 如何以不会触发这种不匹配的方式将 0.40 美元表示为 BigDecimal?
【问题讨论】:
-
根据 javadocs 将此 BigDecimal 与指定的 Object 进行比较是否相等。与 compareTo 不同,此方法仅当两个 BigDecimal 对象的值和比例相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。
-
0.40表示你已经测量到百位,并且你确定的百位是0。0.4表示您未测量到百位,并且您不百位值是多少。 -
也可以试试
compareTo -
不,你应该使用
assertEquals(0, actualBigDecimal.compareTo(expectedBigDecimal));