“For”循环增量无法正常工作。为什么?

时间:2011-07-28 10:03:51

标签: c# .net loops floating-point

for (float i = -1; i <= 1; i+=0.1f)   
{
    Console.WriteLine(i);   
}

这是结果

-1
-0.9
-0.8
-0.6999999
-0.5999999
-0.4999999
-0.3999999
-0.2999999
-0.1999999
-0.09999993
7.450581E-08
0.1000001
0.2000001
0.3000001
0.4000001
0.5000001
0.6000001
0.7000001
0.8000001
0.9000002

6 个答案:

答案 0 :(得分:4)

因为float不是精确的十进制数而是浮点数。改为使用十进制。

请参阅维基百科以获取参考:Wikipedia

答案 1 :(得分:2)

Float和double无法准确显示十进制值。看看维基百科是如何实现的。

您可能希望改用Decimal

答案 2 :(得分:2)

答案 3 :(得分:1)

使用整数进行索引编制。如果你需要循环内的浮点值,那么在那里计算:

for (int i = -10; i <= 10; i++)   
{
    Console.WriteLine(i / (float) 10);   
}

答案 4 :(得分:0)

float代表32位floating point number。它无法准确地表示这些值。这是另一篇必读文章,关于专门针对.NET的浮点:http://csharpindepth.com/Articles/General/FloatingPoint.aspx

答案 5 :(得分:0)

这是因为你使用的是浮点数。计算浮点数并不完全正确,因为您的计算机在内部使用二进制数而不是十进制数。关于这个问题的好消息在这里:http://floating-point-gui.de/