“For"循环增量不能正常工作.为什么

本文关键字:常工作 工作 为什么 不能 For quot 循环 | 更新日期: 2023-09-27 18:04:02

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

“For"循环增量不能正常工作.为什么

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

参考wikipedia: wikipedia

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/