3

以下のコードでは、x = 60 で y = 2 の場合、結果 = 500 になります。これは正しいですが、x の値が 60 から 119 の間で500 になります。また、x < 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 用のメトロノーム アプリケーションを作成しようとしているときに、この問題に遭遇しました。問題を特定しやすくするために、このコードをコンテキストから外しました。どんな助けや提案も大歓迎です!

4

3 に答える 3

6

答えは間違っていません。ただあなたが期待しているものではありません。int 結果を返す int 除算を使用しています。これは、int 結果に切り捨てられた結果です。

int の結果を返す int 除算ではなく、double の結果を得るために double の除算を行います。

// the 1.0 will allow for floating point division
result = (long) (1000 * (1.0 / (x / 60)) / y); 
于 2013-09-10T01:14:29.517 に答える
1

整数演算はそれを言う

1999 / 100

ご想像のとおり、19.99 や 20 ではなく、実際には 19 です。

整数で除算を行うと、常に実際の (数学的な) 結果のフロア化された結果が得られます。

于 2013-09-10T01:19:11.413 に答える
1

式は次のように簡略化できます。

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

浮動小数点の除算結果が必要な場合:

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

丸められた浮動小数点除算結果が必要な場合:

result = long(1000 * 60.0 / (x * y) + 0.5);
于 2013-09-10T01:25:48.887 に答える