为什么我们分别在整数除法中“浮动”?

时间:2014-12-28 06:54:05

标签: c variables

例如:

int number1 = 1, number2= 2;
float variable = (float)number1/(float)number2;

而不是这个,为什么我们不能只使用“浮动”一次?例如:

int number1 = 1, number2= 2;
float variable = (float)(number1/number2);

4 个答案:

答案 0 :(得分:6)

目标是避免整数除法带来的截断。这要求除法的操作数中的至少一个是浮点数。因此,您只需要一个演员float,但在正确的位置。例如,

float variable = number1/(float)number2; // denominator is float

float variable = ((float)number1)/number2; // numerator is float

请注意,在第二个示例中,为了清楚起见,添加了一组额外的括号,但由于优先规则,它与

相同
float variable = (float)number1/number2; // numerator is float, same as above

另请注意,在第二个示例中,

float variable = (float)(number1/number2);

在整数除法之后应用了<{1>}的转换,因此这不会避免截断。由于表达式的结果无论如何都被分配给float,因此它完全是

float

答案 1 :(得分:3)

您可以编写任一表达式,但会得到不同的结果。

对于float variable = (float)(number1 / number2);variable中的值为0,因为除法是以整数除法完成的,而1/2是0,并且结果被转换。

使用float variable = (float)number1 / (float)number2;时,variable中的值为0.5,因为除法是以浮点除法完成的。

float variable = (float)number1 / (float)number2;中的任何一个强制转换都可以省略,结果是相同的;在分割发生之前,另一个操作数从int转换为float

答案 2 :(得分:0)

由于number1number2int s,所执行的除法将是积分除法。因此,number1/number2将评估为int 0.要进行浮点运算,您需要转换它们。请注意,只需转换一个就足够了,因为另一个将被隐式提升。所以,你可以说((float)number1)/number2

答案 3 :(得分:0)

在第一种情况下,

1/2结果0

在第二种情况下,你可以使用float一次,但必须在分割之前使用其中一个数字

1.0 / 2.0或1.0 / 2或1 / 2.0结果0.5