不能做师

时间:2013-12-04 17:38:57

标签: c#

int h1 = 2;
int d1 = 4;
decimal c1 = d1/(d1+h1);
Console.WriteLine("{0:F9}", c1);

控制台显示0,00000000000,但我预计会看到0,6666666,最后可能是7。问题是什么?我尝试了不同的方法,但总是看到0,00000000 ...

2 个答案:

答案 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)

您的d1h1是int的,因此结果首先投放到int,然后将其分配给c1,将d1投射到十进制将解决您的问题< / p>