温馨提示×

温馨提示×

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

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

Java Double 双精度怎么判断相等

发布时间:2026-07-25 02:11:47 来源:亿速云 阅读:105 作者:小樊 栏目:编程语言

在 Java 里,double(双精度浮点数)不要直接用 == 判断相等,原因是浮点数存在精度误差。下面给你几种常见、正确的做法,以及适用场景。


一、为什么不能用 ==

double a = 0.1 + 0.2;
double b = 0.3;

System.out.println(a == b); // false

原因:
0.1 + 0.2 在二进制中无法精确表示,结果并不是数学意义上的 0.3。


二、最常用:允许误差(推荐 ✅)

使用 Math.abs 判断误差范围

double a = 0.1 + 0.2;
double b = 0.3;

double EPSILON = 1e-9;

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

适用于绝大多数业务场景

EPSILON 取值建议:

  • 一般计算:1e-9
  • 金融计算:1e-6 或更小
  • 科学计算:根据精度要求

三、使用 Double.compare(不推荐用于相等判断 ❌)

Double.compare(a, b) == 0

⚠️ 本质仍然是 ==不能解决精度问题,只适合排序或比较大小。


四、判断是否为 NaN(特殊情况)

Double.isNaN(a)

⚠️ NaN == NaN 永远为 false

double a = Double.NaN;
System.out.println(a == a); // false

五、判断是否为无穷大

Double.isInfinite(a)

六、使用 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 比较 Math.abs(a - b) < EPSILON
排序 / 大小比较 Double.compare(a, b)
金额 / 高精度 BigDecimal
NaN / 无穷 Double.isNaN / isInfinite

如果你愿意,我可以帮你:

  • 写一个 通用的 double 比较工具方法
  • 或根据你的业务场景(比如价格、坐标、物理计算)给出最合适的判断方式
向AI问一下细节

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

AI