2014-07-21 59 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

谢谢你,小数对我来说是诀窍。 –