在下面的代码中,当x = 60且y = 2时,结果= 500.这是正确的,但是在60和119之间的任何x值也给出500.此外,当x <0时,x <0。 60,我得到0除错。另外,当x> = 120时,结果= 0.我难以理解为什么会发生这种情况。我也尝试过使用int,float和long的各种组合,但仍然没有运气。
public class main {
static long result;
static int x;
static int y;
public static void main(String[] args) {
x = 60;
y = 2;
result = 1000 * (1 / (x / 60)) / y;
System.out.println(result);
}
}
顺便说一句,我在尝试为Android制作节拍器应用程序时遇到了这个问题。我将此代码脱离了上下文,以便更容易隔离问题。任何帮助和/或建议都非常感谢!
答案 0 :(得分:6)
答案没有错,这不是你所期待的。你正在使用int division,它将返回一个int结果,这个结果被截断为int结果。
你想做双重除法得到双重结果,而不是int除法,它返回一个int结果。
// the 1.0 will allow for floating point division
result = (long) (1000 * (1.0 / (x / 60)) / y);
答案 1 :(得分:1)
整数算术说明
1999 / 100
实际上是19,而不是19.99或20,正如您所料。
如果你用整数进行除法,你将总是得到实际(数学)结果的分层结果。
答案 2 :(得分:1)
该等式可以简化为
result = 1000 * 60 / (x * y);
如果你想要浮点除法结果:
result = long(1000 * 60.0 / (x * y));
如果你想要舍入浮点除法结果:
result = long(1000 * 60.0 / (x * y) + 0.5);