温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Double 双精度怎样比较

发布时间:2026-10-26 10:19:56 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,不要直接用 == 比较 Double(或 double),因为浮点数存在精度误差。常见比较方式如下:


1️⃣ 比较差值(最常用 ✅)

设定一个极小误差范围(epsilon):

double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-9;

if (Math.abs(a - b) < epsilon) {
    System.out.println("相等");
}

✅ 推荐做法
✅ 适合绝大多数业务场景


2️⃣ 使用 Double.compare()

只比较“大小关系”,不判断精度:

int r = Double.compare(a, b);
// r < 0 : a < b
// r == 0: a == b
// r > 0 : a > b

⚠️ 注意:仍然是严格相等,不解决精度问题


3️⃣ 使用 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)(仍是浮点误差)


4️⃣ 包装类型 Double 的特殊情况

Double x = 0.0;
Double y = 0.0;

x == y; // 可能为 false(不同对象)

✅ 正确方式:

x.equals(y); // 或 Double.compare(x, y) == 0

✅ 总结建议

场景 推荐方式
一般计算 差值比较
排序 / 比较大小 Double.compare
金额 / 高精度 BigDecimal
包装类 不用 ==

如果你有具体业务场景(如金额、坐标、科学计算),我可以给你更合适的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手