我有这个:
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做这些东西吗?
答案 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