前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java浮点数比较 - 以double为例

Java浮点数比较 - 以double为例

作者头像
地鼠窝里有个Gopher
发布2022-10-30 14:41:53
5980
发布2022-10-30 14:41:53
举报

Java中浮点数的比较

普通>和<在比较时可能出现的问题

  通常,我们直接使用<>对数字进行比较。但是在用这些符号进行浮点数比较时,不够严谨(NaN、0.0、-0.0,详见IEEE754标准)。建议使用Double.compare()Float.compare()进行比较。

Double.compare()源码

代码语言:javascript
复制
    public static int compare(double d1, double d2) {
        if (d1 < d2)
            return -1;           // Neither val is NaN, thisVal is smaller
        if (d1 > d2)
            return 1;            // Neither val is NaN, thisVal is larger

        // Cannot use doubleToRawLongBits because of possibility of NaNs.
        long thisBits    = Double.doubleToLongBits(d1);
        long anotherBits = Double.doubleToLongBits(d2);

        return (thisBits == anotherBits ?  0 : // Values are equal
                (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
                 1));                          // (0.0, -0.0) or (NaN, !NaN)
    }

  源码将浮点数转化为long类型的位序列,并根据IEEE754标准进行大小比较,可以解决0.0、-0.0的比较问题(0.0 > -0.0),以及NaN的问题(NaN永远比!NaN大)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java中浮点数的比较
  • 普通>和<在比较时可能出现的问题
  • Double.compare()源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档