Java 用什么方法检查大于双倍的

Java 用什么方法检查大于双倍的,java,floating-point,floating-point-precision,Java,Floating Point,Floating Point Precision,我有这个: double a = ...; double b = ...; if (a < b) { .... } else .... double a=。。。; 双b=。。。; if(a

我有这个:

double a = ...;
double b = ...;
if (a < b) {
    ....
} else
....
double a=。。。;
双b=。。。;
if(a
但我不能将此方法用于浮点(双精度),因为,例如:

double a = 5 - 4.9 = 0.999999964;
double b = 0.1;
a < b = true // when it should be false
双a=5-4.9=0.99964;
双b=0.1;
a
我在考虑两种可能的解决办法

  • 第一种方法使用乘以某个数字,转换为整数并舍入:

    (int)数学四舍五入(a*10000)<(int)数学四舍五入(b*10000)

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

    double decimaPrecision=0.00001;
    双倍最大值=数学最大值(a,b);
    双分钟=数学分钟(a,b);
    返回数学abs(a/b)>(1.0+分贝精度)


我应该使用什么方法?你知道更好的检查方法吗?你知道有哪种3pp可以做这些事情吗?

你可以使用
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

+好的,公平的问题。它始终取决于您的特定用例。你能发布更多的上下文吗?你确定
5-4.9
的结果是=
0.99999964
?请仔细检查。@RuchiraGayanRanaweera我没有检查a==b。。。这就是问题所在difference@Manuelarte字体这不是一个重要的区别
=
对于
双精度
很好。另见