(浮点)m / f和(浮点)之间的差值(m / f)

时间:2014-03-15 02:58:16

标签: java c++ casting

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周围添加括号是如何改变答案的。

5 个答案:

答案 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.