在 Java 中,不能直接用 == 判断两个 float(或 Float)是否“相等”,因为浮点数存在精度误差。常见做法如下:
定义一个很小的误差值(epsilon),判断差值是否在允许范围内:
float a = 0.1f + 0.2f;
float b = 0.3f;
float epsilon = 1e-6f;
if (Math.abs(a - b) < epsilon) {
System.out.println("相等");
}
✅ 适用于绝大多数业务场景
✅ 可控精度
Float.compare()(不推荐用于“相等”)Float.compare 是按二进制值比较:
if (Float.compare(a, b) == 0) {
// 完全二进制相等
}
⚠️ 仍然受浮点误差影响
⚠️ 0.1f + 0.2f != 0.3f
Float.floatToIntBits()(极少用)用于底层或序列化场景:
if (Float.floatToIntBits(a) == Float.floatToIntBits(b)) {
}
BigDecimal(高精度场景)对金额、金融计算非常安全:
BigDecimal a = new BigDecimal("0.1").add(new BigDecimal("0.2"));
BigDecimal b = new BigDecimal("0.3");
if (a.compareTo(b) == 0) {
System.out.println("相等");
}
❗ 不要用 new BigDecimal(0.1)(仍然有误差)
Float.NaNNaN 不等于任何值(包括自己):
if (Float.isNaN(a) || Float.isNaN(b)) {
// 特殊处理
}
| 场景 | 推荐方式 |
|---|---|
| 普通计算 | 误差范围 |
| 金融/精确 | BigDecimal |
| 底层比较 | floatToIntBits |
一句话:浮点数判相等,永远用“误差”或“BigDecimal”。
如果你有具体业务场景(如金额、图形、算法),我可以给你更合适的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。