2013-07-29 65 views
0

總和我嘗試下面的程序爲什麼java7給出錯誤輸出的雙

class test{ 
public static void main (String argv[]){ 
    double x = 0.1; 
    double y = 0; 
    for (int i =0;i<10 ; i++){ 
     y=y+x; 
     System.out.println (y); 
    } 
} 
} 

,但它提供了以下輸出

0.1 
0.2 
0.30000000000000004 
0.4 
0.5 
0.6 
0.7 
0.7999999999999999 
0.8999999999999999 
0.9999999999999999 

爲什麼java7給這個,而不是僅僅0.3或0.8 .. 。!

我試着在網上java編譯器下面以及 http://ideone.com/g0bYad

回答

1

浮點數(包括Java的double型)不完全準確。有關更多詳細信息,請參閱how they encode information。您可以看到並非所有數字都具有精確的IEEE 754 64位表示形式

0

浮點值缺少準確的精度。這是他們的本性。嘗試使用BigDecimal類。