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。
答案 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,因为在每种情况下,转换加倍发生在除法之前的分子或分母上,然后因为它不会在两个整数之间发生,导致双重