int h1 = 2;
int d1 = 4;
decimal c1 = d1/(d1+h1);
Console.WriteLine("{0:F9}", c1);
控制台显示0,00000000000,但我预计会看到0,6666666,最后可能是7。问题是什么?我尝试了不同的方法,但总是看到0,00000000 ...
答案 0 :(得分:16)
这是因为你正在进行整数除法。您需要将一个值转换为十进制才能进行小数除法:
int h1 = 2;
int d1 = 4;
decimal c1 = (decimal)d1 / (d1 + h1);
基本上,您可以将当前有问题的行为翻译为:
decimal c1 = (decimal)(d1 / (d1 + h1));
decimal c1 = (decimal)(4 / (2 + 4));
decimal c1 = (decimal)(4 / 6);
decimal c1 = (decimal)(0); <-- Integer division
decimal c1 = 0m;
这就是为什么你需要分子或分母明确地为十进制数。
此外,你进行投射的地方完全不相关,你只需要触发小数除法。这4行具有完全相同的结果:
decimal c1 = (decimal)d1 / (d1 + h1);
decimal c2 = d1 / ((decimal)d1 + h1);
decimal c3 = d1 / (d1 + (decimal)h1);
decimal c4 = d1 / (decimal)(d1 + h1);
答案 1 :(得分:1)
您的d1
和h1
是int的,因此结果首先投放到int
,然后将其分配给c1,将d1
投射到十进制将解决您的问题< / p>