Java 中 double 和 float 原生类型的比较\n


如果用 .5 或 .0 或 .1235(以 5 或 0 结尾)比较 float 值和 double 值,则 == 运算符返回 true,否则将返回 false。请参见以下示例。

示例

现场演示

public class Tester {
   public static void main(String[] args) {
      double d1 = 2.5;
      float f1 = 2.5f;
      System.out.println(d1 == f1);

      double d2 = 2.4;
      float f2 = 2.4f;
      System.out.println(d2 == f2);
   }
}

输出

true
false

此逻辑背后的原因是 float 和小数的近似值。Float 数据类型是单精度 32 位 IEEE 754 浮点,而 double 数据类型是双精度 64 位 IEEE 754 浮点。以 5 或 0 结尾的数字可以在 double 和 float 中精确表示。

对于其他数字,它类似于将 0.3333 与 0.33333333 进行比较,其中后者的精度较高。

Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

比较 double 和 float 的正确方法

为了比较 double 和 float,请检查两者之间的差异是否大于或小于特定边距。请参见以下示例。

示例

现场演示

public class Tester {
   public static void main(String[] args) {
      double d1 = 2.5;
      float f1 = 2.5f;

      System.out.println(d1 == f1);

      double d2 = 2.4;
      float f2 = 2.4f;
      double margin = 0.0000001;

      System.out.println(compareNumbers(d2, f2, margin));
   }  

   private static boolean compareNumbers(double d, float f, double margin) {
      if(Math.abs(d - f) < margin) {
         return true;
      }        
      return false;
   }
}

输出

true
true

更新时间:18-Jun-2020

624 次浏览

开始你的 职业生涯

完成课程获得认证

开始
广告