在 Java 中,不能直接用 == 判断两个 float(或 Float)是否“相等”,因为浮点数存在精度误差。常见做法如下:
==float a = 0.1f;
float b = 0.1f;
System.out.println(a == b); // 通常 true(字面量相同)
float c = 1.0f / 3.0f;
float d = c * 3.0f;
System.out.println(d == 1.0f); // false(精度问题)
浮点数计算可能产生极小误差,直接比较不可靠。
float a = 1.0f / 3.0f;
float b = a * 3.0f;
float epsilon = 1e-6f;
if (Math.abs(a - b) < epsilon) {
System.out.println("相等");
}
✅ 最常用、最安全
Float.compare()(不推荐用于“近似相等”)if (Float.compare(a, b) == 0) {
// 仅当二进制完全相等
}
⚠️ 本质仍然是精确比较,不适合计算结果。
Float.floatToIntBits()(极少用)if (Float.floatToIntBits(a) == Float.floatToIntBits(b)) {
}
仅用于底层或协议场景。
Float 包装类型的注意点Float x = 0.1f;
Float y = 0.1f;
x == y; // 可能 false(对象比较)
x.equals(y); // true(值比较)
但 equals 仍然是精确比较。
| 场景 | 推荐方式 |
|---|---|
| 计算结果比较 | Math.abs(a - b) < epsilon |
| 确定值比较 | == 或 equals |
| 排序 | Float.compare |
public static boolean floatEquals(float a, float b, float epsilon) {
return Math.abs(a - b) < epsilon;
}
如果你有具体业务场景(如金额、坐标、传感器数据),我可以给你更合适的精度建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。