我最近在一个算法上工作,我偶然发现了一点,例如我有两个java BigDecimals,它们的值是-1.9997和-1.9989,BigDecimal的compareTo方法认为-1.9989大于-1.9997,在这种情况下我想要它们被视为相等,但如果我有-1.9和-1.86我希望它们被认为是不同的。有没有办法在Java中做到这一点?
答案 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);
此代码舍入为两位小数。