int x = 73;
int y = 100;
double pct = x/y;
为什么我看到0而不是.73?
答案 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;