2014-07-21 58 views
-1

我有這樣的代碼:C#float和double錯誤

static void Main() 
{ 
    float i; 

    for (i = 0; i <= 100; i = i + 0.01F) 
    { 
     Console.WriteLine(i); 

    } 

} 

而且它打印我:

0 
0.01 
0.02 
0.03 
0.04 
0.05 
0.05999999 
0.06999999 
0.07999999 
0.08999999 
0.09999999 
0.11 

這是一個錯誤還是我做錯了什麼? 有沒有解決這個問題的方法?

+1

http://csharpindepth.com/Articles/General/FloatingPoint.aspx –

+3

[什麼每臺計算機科學家應該知道關於浮點運算(HTTP:// docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Steve

+1

[SO]上有許多重複內容解釋了C#和其他語言中浮點值的行爲,我選擇了其中一個思想很好地解釋了這個問題,如果你需要其他的解釋/例子,請做一個搜索[float bug .NET](http://stackoverflow.com/search?q=float+bug+%5B.net%5D) –

回答

6

這不是一個錯誤。這是浮點數的一個基本屬性。這些數字被存儲爲尾數和指數,並且它們不能以完美的精度表示每個可能的數字。如果你需要精度,你必須使用十進制類型。

對於很多這方面的信息看What Every Computer Scientist Should Know About Floating-Point Arithmetic

+0

它是不是一個錯誤,這是一個功能。 :) – bumbumpaw

+0

謝謝你,小數對我來說是訣竅。 –