天天看點

java double比較大小

double和float不能表達每個數值,他們是使用近似來表示值的。

考慮一下下面例子的輸出内容

public classOne{
 publicstaticvoidmain(String[] args)
 {
      double a = 1.000001;
     doubleb = 0.000001;
     doubled = a - b;
     System.out.println(d);
     System.out.println(d==1.0);
 }
}
           

     結果是false。Java程式員經常犯的一個錯誤是,在循環中使用浮點數和用==運算符檢查條件,在最壞的情況下,這可能會建立一個無限循環,導緻Java應用程式挂起。是以我們不應該用==進行精确比較,應該這樣做:

public classOne{
 publicstaticvoidmain(String[] args)
 {
      double a = 1.000001;
     doubleb = 0.000001;
     doubled = a - b;
     if(Math.abs(d-1.0)<= 0.000001)
     {
      System.out.println("the are equal");
     }
 }
}
           

     對于double值,我們應該做計算而不是比較,總是比較近似而不是精确的值。例如:當需要比較值是不是等于10.00的時候,我們用是否> 9.95來表示,如下所示:

if (amount == 100.00) // Not Ok
if (amount > 99.995) // Ok
           

參考文檔

http://www.java67.com/2015/09/float-and-double-value-comparison-in-java-use-relational.html