int和double的划分

时间:2015-02-26 23:23:04

标签: java int double

int x=5, y=2;
System.out.println(x/y-(double)(x/y);

当我在Eclipse上运行它时,为什么答案为0?我希望通过削减0.5左边的属性(int)5/2 = 2。然后(双)5/2 = 2.5,所以2 - 2.5 = -0.5。

2 个答案:

答案 0 :(得分:11)

问题是你在分割后已经转为double

(double)(x/y)

整数除法仍然存在,因此结果与x/y相同,减法产生0

在分区之前将x投射到double ,以强制进行浮点分割:

((double) x / y)

答案 1 :(得分:2)

请注意,您缺少一个括号来平衡表达式。假设你纠正它:

int x=5, y=2; System.out.println( x/y - (double)(x/y) );

5/2的整数除法包含在括号中,因此在转换为double之前发生。

如果你有这个

int x=5, y=2; System.out.println( x/y - (double) x/y );

或者

int x=5, y=2; System.out.println( x/y - x/ (double) y );

你会得到-0.5,因为在每种情况下,转换加倍发生在除法之前的分子或分母上,然后因为它不会在两个整数之间发生,导致双重