为什么我们分别在整数除法中“浮动”?
例如:
int number1 = 1, number2= 2; float variable = (float)number1/(float)number2;
而不是这个,为什么我们不能只使用“浮动”一次? 例如:
int number1 = 1, number2= 2; float variable = (float)(number1/number2);
目标是避免整数除法带来的截断。 这要求除法的至少一个操作数是浮点数。 因此,你只需要一个演员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);
在整数除法之后应用cast to float
,因此这不会避免截断。 由于表达式的结果无论如何都被分配给了一个float
,因此它是精确的
float variable = number1/number2;
您可以编写任一表达式,但会得到不同的结果。
使用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;
任何一个强制转换float variable = (float)number1 / (float)number2;
可省略,结果相同; 在除法发生之前,另一个操作数从int
转换为float
。
由于number1
和number2
是int
,所以执行的除法将是积分除法。 因此, number1/number2
将计算为int
0.要进行浮点运算,需要进行转换。 请注意,只需转换一个就足够了,因为另一个将被隐式提升。 所以,你可以说((float)number1)/number2
。
在第一种情况下,
1/2结果0
在第二种情况下,您可以使用float一次,但必须在分割之前应用其中一个数字
1.0 / 2.0或1.0 / 2或1 / 2.0结果0.5