我广泛使用BigDecimals。我经常需要进行长时间的计算,然后比较结果。由于这些长时间的计算,答案不是1
,而是0.9999999...
。这就是为什么我不能完全比较BigDecimals而只是比较某个错误。
如何检查一个BigDecimal是否位于另一个的epsilon中?
备注:我已经知道answer.subtract(expected).abs().compareTo(epsilon) < 0
了。但我必须一遍又一遍地写它,我正在寻找一种更简单的方法。
答案 0 :(得分:1)
BigDecimal error = new BigDecimal(1e-5);
BigDecimal a = new BigDecimal(100);
BigDecimal b = new BigDecimal(11.2);
if (a.subtract(b).abs().compareTo(error) < 0) {
// a approximately equals b
}
答案 1 :(得分:0)
只需在util类或其他内容中添加自己的方法:
let q: Query = [
"dateModified" [
"$gte": lastUpdateCheck
]
]
答案 2 :(得分:0)
没有Div 0问题
public static boolean almostEqual(BigDecimal a, BigDecimal b) {
int scale = Math.min(a.scale(), b.scale()) -1;
return a.setScale(scale, RoundingMode.HALF_UP)
.compareTo(b.setScale(scale, RoundingMode.HALF_UP)) == 0;
}
并控制规模