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 и double не могут точно отображать десятичные значения. Посмотрите в википедии, как они реализованы.
Вместо этого вы можете использовать Decimal.
Decimal
Используйте целые числа для целей индексации. И если вам нужны значения с плавающей точкой внутри цикла, рассчитайте их там:
for (int i = -10; i <= 10; i++) { Console.WriteLine(i / (float) 10); }
Это из-за того, что вы используете числа с плавающей запятой. Вычисление чисел с плавающей запятой не совсем правильно, потому что ваш компьютер использует внутренние двоичные числа, а не десятичные числа. Хорошая информация об этой проблеме здесь: http://floating -point-gui.de /
float представляет 32-битное число с плавающей запятой .Он не может точно представлять эти значения.Вот еще одна, обязательная к прочтению статья о плавающей запятой, специально для .NET: http://csharpindepth.com/Articles/General/FloatingPoint.aspx
float