一个BigDecimal大约等于另一个Bigdecimal

时间:2018-01-08 10:14:26

标签: java precision bigdecimal

我广泛使用BigDecimals。我经常需要进行长时间的计算,然后比较结果。由于这些长时间的计算,答案不是1,而是0.9999999...。这就是为什么我不能完全比较BigDecimals而只是比较某个错误。

如何检查一个BigDecimal是否位于另一个的epsilon中?

备注:我已经知道answer.subtract(expected).abs().compareTo(epsilon) < 0了。但我必须一遍又一遍地写它,我正在寻找一种更简单的方法。

3 个答案:

答案 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;

}

并控制规模