1. ホーム
  2. java

[解決済み] 1000 * 60 * 60 * 24 * 30 の結果が負の数になる[複製]

2022-02-10 22:16:20

質問

ミリ秒を掛けて30日を計算しようとしていますが、days_30の値が常に負数になってしまい、理由がわかりません。

何かご提案があれば、ぜひお願いします。

CODE SNIPPETです。

// check to ensure proper time has elapsed
                SharedPreferences pref = getApplicationContext()
                        .getSharedPreferences("DataCountService", 0);
                 long days_30 = 1000 * 60 * 60 * 24 * 30;
                 long oldTime = pref.getLong("smstimestamp", 0);
                long newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

days_30 の値の結果です。-1702967296

追伸

 double days_30 = 1000 * 60 * 60 * 24 * 30;
                 double oldTime = pref.getLong("smstimestamp", 0);
                double newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

結果は、より小さい、しかしまだ負の数です。-1.702967296E9

解き方は?

を掛け算しています。 ints を一緒にすると、オーバーフローが発生するのは の場合、最大整数は 2^31 - 1 . 乗算の後にのみ、変換されます。 long . 最初の数字を long .

long days_30 = (long) 1000 * 60 * 60 * 24 * 30;

を使用するか、または long リテラルを使用します。

long days_30 = 1000L * 60 * 60 * 24 * 30;

これにより、強制的に long の演算を最初から行う。