在Java中执行计算会给出完全错误的答案

时间:2013-09-10 01:13:41

标签: java android int long-integer

在下面的代码中,当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制作节拍器应用程序时遇到了这个问题。我将此代码脱离了上下文,以便更容易隔离问题。任何帮助和/或建议都非常感谢!

3 个答案:

答案 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);