你如何划分整数并在C#中获得双倍?

时间:2009-11-23 20:50:42

标签: c# math

int x = 73;  
int y = 100;  
double pct = x/y;  

为什么我看到0而不是.73?

6 个答案:

答案 0 :(得分:34)

因为除法是用整数完成的,然后转换为double。试试这个:

double pct = (double)x / (double)y;

答案 1 :(得分:8)

它在所有类C语言中都是一样的。如果除以两个整数,则结果为整数。 0.73不是整数。

常见的解决方法是将两个数字中的一个乘以1.0以使其成为浮点类型,或者只是将其转换为。

答案 2 :(得分:3)

因为操作仍然是int类型。试试double pct = (double)x / (double)y;

答案 3 :(得分:2)

整数除法会丢弃结果的小数部分。请参阅:http://mathworld.wolfram.com/IntegerDivision.html

答案 4 :(得分:2)

了解一行代码中的执行流程非常重要。您可以正确地假设将等式的右侧设置为等于double(在左侧)将隐式地将解决方案转换为double。但是,流程执行表明在您到达代码的double pct =部分之前,x / y会自行计算 。因此,由于两个int彼此分开,它们将在被隐式转换为双精度之前评估为int解(在这种情况下,向零舍入)

正如其他人所指出的那样,您需要将int变量转换为double s,以便解决方案以double而不是int形式出现。

答案 5 :(得分:1)

那是因为除法(x)的左手操作数的类型是int类型,因此x / y的返回类型仍为int。目标变量的类型为double的事实不会影响操作。 要获得预期结果,首先必须将x转换(转换)为double,如下所示:

double pct = (double)x / y;