【问题标题】:Performing a calculation in Java gives completely wrong answer [closed]在Java中执行计算给出了完全错误的答案[关闭]
【发布时间】:2013-09-13 14:20:42
【问题描述】:

在下面的代码中,当 x = 60 和 y = 2 时,结果 = 500。这是正确的,但是 60 到 119 之间的任何 x 值给出 500。此外,当 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 制作节拍器应用程序时遇到了这个问题。我把这段代码脱离了上下文,以便更容易地隔离问题。非常感谢任何帮助和/或建议!

【问题讨论】:

标签: java android int long-integer


【解决方案1】:

答案没有错,只是不是你所期望的。您正在使用 int 除法,它将返回一个 int 结果,该结果被截断为 int 结果。

您想要进行双除法以获得双精度结果,而不是返回 int 结果的 int 除法。

// the 1.0 will allow for floating point division
result = (long) (1000 * (1.0 / (x / 60)) / y); 

【讨论】:

  • 好的,谢谢!我以前听说过 double 并使用过它,但我有一个巨大的 2 天大脑放屁,完全忘记了这一点!太容易了
【解决方案2】:

整数算术说明

1999 / 100

实际上是 19,而不是您可能期望的 19.99 或 20。

如果你用整数做除法,你总是会得到实际(数学)结果的下限结果。

【讨论】:

    【解决方案3】:

    方程可以简化为

    result = 1000 * 60 / (x * y);
    

    如果要浮点除法结果:

    result = long(1000 * 60.0 / (x * y));
    

    如果你想要四舍五入的浮点除法结果:

    result = long(1000 * 60.0 / (x * y) + 0.5);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多