我考虑使用BigDecimal来比较两个货币值,这些值应该保留2位小数。例如,我期望以下比较结果为0,因为我正在比较应该四舍五入为0.02的值和实际为0.02的值。但是它返回的是-1!! 有没有正确的方法做到这一点?
这种方法也适用于更大的数字,如123.45与123.4534之间的比较...应该在使用"compareTo"函数时返回0。
我已经尝试了使用MathContext,但似乎不太优雅...是否有更好的方式?
这种方法也适用于更大的数字,如123.45与123.4534之间的比较...应该在使用"compareTo"函数时返回0。
我已经尝试了使用MathContext,但似乎不太优雅...是否有更好的方式?
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));