Comparison of double and float primitive types in Java

Object Oriented ProgrammingJava Programming Java8

If we compare a float and a double value with .5 or .0 or .1235 (ending with 5 or 0), then == operator returns true, otherwise it will return false. See the below example.

Example

Live Demo

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);
   }
}

Output

true
false

The reason behind this logic is the approximation of float and decimal. Float data type is a single-precision 32-bit IEEE 754 floating point and double data type is a double-precision 64-bit IEEE 754 floating point. A number ending with 5 or 0 can be represented exactly in both double and float.

In case of other numbers, it is similar to comparing 0.3333 to 0.33333333 where precision of later is high.

Correct way of comparing double and float

In order to compare double and float, check the difference of two to be greater than or less than a particular margin. See the example below.

Example

Live Demo

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;
   }
}

Output

true
true
raja
Published on 23-Jul-2018 11:08:44
Advertisements