Вы используете int / int, которая делает все в целочисленной арифметике, даже если вы присваиваете десятичную / двойную / переменную с плавающей запятой.
Принудительное использование одного из операндов того типа, который вы хотите использовать для арифметики.
for (int i = 0; i <= 100; i++)
{
decimal result = i / 100m;
long result2 = i / 100;
double result3 = i / 100d;
float result4 = i / 100f;
Console.WriteLine("{0}/{1}={2} ({3},{4},{5}, {6})",
i, 100, i / 100d, result, result2, result3, result4);
}
Результаты:
0/100=0 (0,0,0, 0)
1/100=0.01 (0.01,0,0.01, 0.01)
2/100=0.02 (0.02,0,0.02, 0.02)
3/100=0.03 (0.03,0,0.03, 0.03)
4/100=0.04 (0.04,0,0.04, 0.04)
5/100=0.05 (0.05,0,0.05, 0.05)
(и т.д.)
Обратите внимание, что не является отображением точного значения, представленного с плавающей запятой или двойным числом - вы, например, не можете представить 0,01 точно как число с плавающей запятой или двойное, например. Форматирование строк эффективно округляет результат. См. Мою статью о .NET с плавающей двоичной точкой для получения дополнительной информации, а также класс, который позволит вам увидеть точное значение двойного.
Я не потрудился использовать 100L для result2
, потому что результат всегда будет одинаковым.