9

値を計算されたものと比較するために、Androidアプリでいくつかの基本的な計算を実行しようとしていますDate.getTime()

データベースクエリ中に行う計算は次のとおりです。

long minus = pauseDays * 24 * 60 * 60 * 1000;

したがって、基本的にはのミリ秒値を計算しますpauseDays。大きくなると(私pauseDaysは90日ほど話している)、何か奇妙なことが起こります。計算結果は負の数です。

奇妙なことに、結果はである必要が7776000000あるため、。よりもはるかに小さいはずですLong.MAX_VALUE。ここで負の数になる理由を誰かに説明してもらえますか?

4

1 に答える 1

23

その理由はおそらくpauseDaysタイプintだからですよね?次に、それを別のintsの束で乗算し、それをに変換しlongます。

これを考慮してください:

public class Main {
  public static void main(String[] args) {
    int pauseDays = 90;
    long minus = pauseDays * 24 * 60 * 60 * 1000;
    System.out.println(minus);

    long pauseDaysL = 90L;
    long minusL = pauseDaysL * 24L * 60L * 60L * 1000L;
    System.out.println(minusL);
  }
}

これの出力は次のとおりです。

-813934592
7776000000

最初long minusは整数を使用して値を生成していることに注意してください。2つ目long minusLは、すべての長整数値を使用します。

于 2012-09-27T22:29:05.300 に答える