什么方法比双打检查更好

时间:2014-09-18 10:26:22

标签: java floating-point floating-point-precision

我有这个:

double a = ...;
double b = ...;
if (a < b) {
    ....
} else
....

但我不能将此方法用于浮点(双精度),例如:

double a = 5 - 4.9 = 0.999999964;
double b = 0.1;
a < b = true // when it should be false

我在考虑两种可能的解决方案

  • 第一个使用乘以一定数字,转换为int和舍入:

    (int) Math.round(a * 10_000) < (int) Math.round(b * 10_000);

  • 或者以这种方式使用epsilon:

    double decimaPrecision = 0.00001; double max = Math.max(a, b); double min = Math.min(a, b); return Math.abs(a/ b) > (1.0 + decimaPrecision);

我应该使用什么方法?你知道更好的检查方法吗?你知道有3pp做这些东西吗?

1 个答案:

答案 0 :(得分:0)

您可以使用BigDecimal进行此类比较:

BigDecimal a = new BigDecimal("5").subtract(new BigDecimal("4.9")); // == 0.1
BigDecimal b = new BigDecimal("0.1"); // == 0.1
System.out.println(a.compareTo(b)); // 0 - they are equal

<强>输出

0