8

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

どんな提案でも大歓迎です!

コードスニペット:

// 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

PS

 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

4

4 に答える 4

1

乗算を次のように変更するだけですlong days_30 = 1000L * 60 * 60 * 24 * 30;

于 2013-06-20T18:40:57.620 に答える
0

Java には、プリミティブ データ型に関して制限があります。long または double が大きすぎると、オーバーフローして負の数になります。より大きな数値を格納するには、BigInteger クラスを使用してみてください。

これをチェックしてください:

Java は整数のアンダーフローとオーバーフローをどのように処理し、どのようにチェックしますか?

于 2013-06-20T18:42:09.123 に答える