不确定为什么程序返回一个int

时间:2014-02-05 20:47:53

标签: java

好的基本问题在这里。

double test = 1/3 * 3.14;

我意识到你需要做(1.0 / 3)以获得实际的双号。但我想知道的是为什么。我会想到,因为你乘以3.14,这将使它成为一个双倍。

所以我认为无论何时在算术方程中使用两个值,无论周围发生了什么,如果它们是整数,那么你会得到一个整数值吗?

即。 x / y * z

虽然x除以y,这是程序关心的全部,如果它们都是整数,你会得到一个整数值吗?只有当你将它乘以z(3.14)时它才变为双精度。

4 个答案:

答案 0 :(得分:4)

当两个运算符具有相同的优先级时,从左到右进行评估。 */具有相同的优先权。

1 / 3 * 3.14首先评估1 / 3。两个操作数都是int,第一个操作是整数除法,结果是int

接下来,评估result * 3.14。一个操作数是int,另一个操作数是double,我们有混合类型。 Java帮我们一个忙,并将int强制转换为double以保持准确性。发生浮点除法,结果为double

答案 1 :(得分:3)

对于具有相同优先级的运算符,关联性接管。 These operators / and * are left-associative,这意味着操作顺序从左到右进行。

因此,1/3首先发生,整数除法发生在3.14有机会将其推广到double之前。

答案 2 :(得分:2)

因为根据算术规则,首先计算1/3。由于它是2个整数,它是一个整数除法,结果为0.之后你有一个双重计算,但错误已经发生。

答案 3 :(得分:0)

我的理解是这与java中的自动装箱有关。 Java假设1/3正在划分两个整数,所以你得到一个int(转换成一个double)。

如果你做了1 / 3D,你会得到0.33333333回来