根据大十进制的有效数字将大十进制与可接受的接近进行比较



我有两个BigDecimal,我想根据它们的有效数字来确定它们是否接近。

例如,请考虑以下事项:

BigDecimal million = new BigDecimal(1_000_000);
BigDecimal tenmillion = new BigDecimal(10_000_000);
BigDecimal a = new BigDecimal("55.89").multiply(million);
BigDecimal b = new BigDecimal("55.88").multiply(million);
BigDecimal c = new BigDecimal("55.88").multiply(tenmillion);

我希望能够确定ab是接近的(而c不是),因为它们只有一个有效数字,即使原始数字它们被数千分开。 确定这一点的最佳方法是什么?

例如,可以用0替换最低有效数字,但是这会在留下55.89 != 55.90的同时55.81 == 55.89,因此这显然不是一个正确的解决方案。

取您允许的最大差值,并在将其用作范围之前将其乘以乘数。

您需要知道精度才能在此处执行任何有用的操作。毕竟,如果您将 13450000 与 13450 进行比较会发生什么?它们非常不同,但如果你只是去掉零,那么它们看起来是一样的。如果您查看两个数字的显着差异,那么 1234000 与 1235000 相比会说真,但 1234500 与 1235000 相比会说假,即使在第二种情况下差异实际上更小。

也许你应该在这里做的是查看百分比差异?换句话说,将一个数字除以另一个数字,看看结果与 1 有多接近。

相关内容

最新更新