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

Hak*_*kan 1 c variables

例如:

int number1 = 1, number2= 2;
float variable = (float)number1/(float)number2;
Run Code Online (Sandbox Code Playgroud)

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

int number1 = 1, number2= 2;
float variable = (float)(number1/number2);
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 6

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

float variable = number1/(float)number2; // denominator is float
Run Code Online (Sandbox Code Playgroud)

要么

float variable = ((float)number1)/number2; // numerator is float
Run Code Online (Sandbox Code Playgroud)

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

float variable = (float)number1/number2; // numerator is float, same as above
Run Code Online (Sandbox Code Playgroud)

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

float variable = (float)(number1/number2);
Run Code Online (Sandbox Code Playgroud)

在整数除法之后float应用强制转换,因此这不会避免截断.由于表达式的结果无论如何都被分配给了它,所以它是精确的float

float variable = number1/number2;
Run Code Online (Sandbox Code Playgroud)