这就是我对浮点等于操作的了解:
为了实际比较浮点数的相等性,通常需要在一些微小的允许差异范围内进行比较;这个范围通常被称为公差或epsilon。
即,
/** Compare two doubles, using default epsilon */
public static boolean equals(double a, double b) {
return equals(a, b, EPSILON);
}
这是唯一的方法,还是有任何其他方法来比较没有任何容差的精确值浮点数。
答案 0 :(得分:3)
==
运算符会比较两个double
值以确保完全相等。
示例:
1.0 == 2.0 - 1.0 // true
0.1 + 0.2 == 0.3 // false
0.25 == 0.125 + 0.125 // true
1.0 / 3.0 == 2.0 / 6.0 // true
答案 1 :(得分:2)
请注意,由于二进制代码的基本限制,浮点中没有精确性。你不能准确地用二进制表示十进制,而是减半,四分之一(以及其他分母为2的幂的比率)用来表示足够接近的值'在一些可接受的容忍度您无法删除此容差并比较确切的值,因为否则您无法用二进制表示小数。
有用的link。
更新: 刚刚在stackoverflow上找到了这个很棒的response,所以我不必全部写出来。阅读本文,也许你会考虑使用BigDecimal来完成手头的任务。
答案 2 :(得分:1)
使用静态Double#compare(double d1, double d2)
方法进行内部double
表示比较如果您确实需要。
答案 3 :(得分:1)
建议只使用==,或使用容差(epsilon)是错误的。如果浮点值是NaN(不是数字),它们将给出意外的结果。您应该使用floatToIntBits Why use Float.floatToIntBits() in Java float comparisons?