int m = 10;
int f = 3;
float r = (float)m/f; // gives 3.333333 as output
float r = (float)(m/f); // gives 3.0 as output
任何人都可以告诉我括号是如何改变答案的,因为我基本上将m/f
的整数值转换为float。我不明白的是m/f
周围添加括号是如何改变答案的。
答案 0 :(得分:4)
答案 1 :(得分:2)
区别在于将转换为float。在第一种情况下m
转换为float
,因此整个表达式变为浮点数。在第二个中,您执行表达式(整数除法),然后转换为float
,此时保存这些宝贵的有效数字为时已晚。
答案 2 :(得分:1)
在第一个例子中,m
首先被渲染为float,然后是split,它会给你一个浮点数。第二个例子,除法是一个int除法,所以它会给你一个int数,然后转换成一个浮点数。
添加括号,更改运算符的优先级。类型转换是在正常除法之前应用的,但是使用括号,告诉编译器在转换之前除以浮动。
答案 3 :(得分:1)
(float)m/f
将(float)m
除以f
。由于其中一个操作数是浮点数,运算符是浮点除法,答案是3.333等。
(float)(m/f)
计算(m/f)
并将其转换为浮动。由于两个操作数都是整数,因此操作是整数除法,m/f
是3.然后将3转换为float
以变为3.0。
答案 4 :(得分:0)
操作顺序:在分割之前应用强制转换,并且两个整数之间的除法总是向下舍入(向下)到Java中最接近的整数。
float r = (float)m/f; // Is the same as ((float)m)/f, and because there's a
// float in the division, we keep everything a float.
float r = (float)(m/f); // Is division between two integers, so we round down
// to the nearest integer before casting to a float.