java - 根据 BigDecimals 的有效数字比较 BigDecimals 是否接近可接受

标签 java bigdecimal significant-digits

我有两个 BigDecimal,我想根据它们的 significant digits 确定它们是否接近。 .

例如,请考虑以下内容:

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.81 == 55.89 而留下 55.89 != 55.90 > 所以这显然实际上不是一个正确的解决方案。

最佳答案

取您允许的最大差异,并将其乘以乘数,然后再将其用作范围。

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

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

关于java - 根据 BigDecimals 的有效数字比较 BigDecimals 是否接近可接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782321/

相关文章:

javascript - 应用程序脚本电子表格浮点计算,谷歌应用程序脚本可以做 float 计算器吗?

python - 为什么python十进制库不为某些输入返回指定数量的有效数字

舍入 R 中的有效数字

java - 应用程序在加载 xml 布局文件的主线程中做太多工作

java - 使用 Maven 时出现 "package does not exist"错误

hibernate - JPA 注释不保留 BigDecimal 精度

java - 如何获得最大的 BigDecimal 值

java - 如何并行运行一组任务并等到所有任务都用 java concurrency utils 完成?

java - 每当我尝试导出到可执行 jar 时 Eclipse 都会出错