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


如果我们比较 float 和 double 值,这些值以 .5 或 .0 或 .1235 结尾(以 5 或 0 结尾),则 == 运算符返回 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 数据类型是单精度 32 位 IEEE 754 浮点数,而 double 数据类型是双精度 64 位 IEEE 754 浮点数。以 5 或 0 结尾的数字可以在 double 和 float 中准确表示。

如果是其他数字,则类似于将 0.3333 与 0.33333333 进行比较,后者精度更高。

正确比较 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

更新时间: 2020 年 6 月 18 日

624 次浏览

开始你的 职业

完成此课程以获得认证

开始学习
广告
© . All rights reserved.