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字体这不是一个重要的区别
和=
对于双精度
很好。另见