我正在考虑使用 BigDecimal 来比较两个四舍五入为 2 位的货币值。例如,我希望以下结果为 0,因为我将应该舍入为 0.02 的值与 0.02 的值进行比较。但它产生 -1 !! 有正确的方法吗?
这也应该适用于更大的数字,比如 123.45 vs 123.4534 ...当使用“compareTo”时应该产生 0。
我试过使用数学上下文,但它看起来并不优雅......有正确的方法吗?
BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));
解决方案是:
BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));