温馨提示×

温馨提示×

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

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

java Double 双精度能否相等

发布时间:2026-10-26 11:38:00 来源:亿速云 阅读:101 作者:小樊 栏目:编程语言

在 Java 中,Double(包装类)和 double(基本类型)在判断“相等”时,情况是不一样的,而且浮点数本身还有精度问题。


1️⃣ 基本类型 double 能否相等

可以,但不推荐直接 == 比较

double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b); // false

原因:
0.1 + 0.2 在二进制中无法精确表示,存在精度误差。

✅ 正确做法:使用误差范围(epsilon)

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

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

2️⃣ Double 包装类能否相等

❌ 错误方式:==

Double x = 0.1 + 0.2;
Double y = 0.3;
System.out.println(x == y); // false(比较的是引用)

== 对 Double 比较的是对象引用,不是值。


✅ 正确方式一:equals

Double x = 0.1 + 0.2;
Double y = 0.3;
System.out.println(x.equals(y)); // false(仍有精度问题)

⚠️ 注意:
equals 只是精确比较 double 值,不会忽略浮点误差


✅ 正确方式二:先转成 double 再比较

Double x = 0.1 + 0.2;
Double y = 0.3;

if (Math.abs(x - y) < 1e-9) {
    System.out.println("相等");
}

3️⃣ 特殊值注意(很重要)

Double.NaN == Double.NaN        // false
Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY // true

✅ 判断 NaN:

Double.isNaN(x)

✅ 总结

场景 是否推荐
double == double ❌ 不推荐
Double == Double ❌ 错误
Double.equals() ⚠️ 仅精确相等
Math.abs(a-b) < eps ✅ 推荐
Double.compare() ✅ 安全

如果你愿意,我可以帮你写一个 通用的 Double 相等工具方法,或者解释 为什么 0.1 + 0.2 ≠ 0.3。

向AI问一下细节

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

AI
助
手