比较BigDecimal值和double值等于两位小数

Compare that BigDecimal value and double value are equal to two decimal places

我正在使用一个 API,returns 一个双精度值。我需要将该值与 BigDecimal 值进行比较,以确定小数点后两位是否相等。

我是否应该将 BigDecimal 转换为 double 然后比较

Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01

或者这种方法有问题吗?也许我应该将 double 转换为 BigDecimal,然后进行比较?

没有。尽管 IEEE double 有保护位,但它不能精确表示十进制值。使用舍入将 double 转换为 BigDecimal,然后使用 compareTo()。请注意,equals() 考虑了小数位,因此 compareTo() 更安全。您可能还需要对 BigDecimal 进行四舍五入。

移动所需的小数位,将两个双精度值乘以 100,根据需要使用 Math.ceil 或 Math.floor,以消除其余的小数位:

Math.ceil(myBigDecimal.doubleValue()*100) == Math.ceil(apiDouble*100)

这相当于截断而不舍入。 如果您担心四舍五入,请乘以 1000,转换为长除以 10 并进行比较。