比较BigDecimals

时间:2012-04-17 06:58:43

标签: java bigdecimal

我最近在一个算法上工作,我偶然发现了一点,例如我有两个java BigDecimals,它们的值是-1.9997和-1.9989,BigDecimal的compareTo方法认为-1.9989大于-1.9997,在这种情况下我想要它们被视为相等,但如果我有-1.9和-1.86我希望它们被认为是不同的。有没有办法在Java中做到这一点?

2 个答案:

答案 0 :(得分:3)

取值之间的差异并检查它是否小于某个阈值/错误,例如

double x = -1.9997;
double y = -1.9989;
if(Math.abs(x - y) < 1e-3) // almost the same

我个人会使用double,除非您需要15位或更多位数的精确度。

答案 1 :(得分:2)

然后你应该围绕你的号码,然后再进行比较。默认比较非常合理。

BigDecimal price = x.scale(2, RoundingMode.HALF_UP);

此代码舍入为两位小数。