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

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 

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

请参阅维基百科以供参考: 维基百科

Float和double无法准确显示十进制值。 看看维基百科如何实施它们。

您可能希望使用Decimal

你需要阅读这个:

每个计算机科学家需要知道的浮点数

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

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

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

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