在 Java 中,不要直接用 == 比较 Double(或 double),因为浮点数存在精度误差。常见比较方式如下:
设定一个极小误差范围(epsilon):
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-9;
if (Math.abs(a - b) < epsilon) {
System.out.println("相等");
}
✅ 推荐做法
✅ 适合绝大多数业务场景
Double.compare()只比较“大小关系”,不判断精度:
int r = Double.compare(a, b);
// r < 0 : a < b
// r == 0: a == b
// r > 0 : a > 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)(仍是浮点误差)
Double 的特殊情况Double x = 0.0;
Double y = 0.0;
x == y; // 可能为 false(不同对象)
✅ 正确方式:
x.equals(y); // 或 Double.compare(x, y) == 0
| 场景 | 推荐方式 |
|---|---|
| 一般计算 | 差值比较 |
| 排序 / 比较大小 | Double.compare |
| 金额 / 高精度 | BigDecimal |
| 包装类 | 不用 == |
如果你有具体业务场景(如金额、坐标、科学计算),我可以给你更合适的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。