I need to check if two double values ββare equal, including magnitude and accuracy. I come across a strange scenario where a primitive double equal check is not consistent and depends on the value of the value.
The Java version I used:
java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
My code is:
public class Test{ public static void main(String args[]) throws Exception{ String val1 = "15.999999999999999"; String val2 = "16"; String val3 = "16.999999999999999"; String val4 = "17"; double d1 = Double.parseDouble(val1); double d2 = Double.parseDouble(val2); double d3 = Double.parseDouble(val3); double d4 = Double.parseDouble(val4); System.out.println(val1 + "=" + val2 + "? ===>" + (d1==d2)); System.out.println(val3 + "=" + val4 + "? ===>" + (d3==d4)); } }
Output:
15.999999999999999=16? ===>false 16.999999999999999=17? ===>true
java
Ramu
source share