2012-09-27 24 views
8

Bazı hesaplanmış öğelerle bir Date.getTime() değerini karşılaştırmak için android uygulamasında bazı temel hesaplama öğelerini yapmaya çalışıyorum.Android/Java: max_value değerini aşmadan uzun zaman alır

Bir veritabanı sorgusu sırasında ne hesaplaması şu şekildedir:

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

Böylece temelde pauseDays milisaniye değerini hesaplayın. pauseDays büyürse (90 gün kadar konuşuyorum), tuhaf bir şey olur. Hesaplamanın sonucu negatif bir sayıdır.

Tuhaf olan, sonuç 7776000000 olmalıdır, bu nedenle Long.MAX_VALUE'dan daha küçük olmalıdır. Bana neden negatif bir sayı aldığımı açıklayabilir mi?

cevap

21

Nedeni, büyük olasılıkla pauseDaysint türündendir, değil mi? Ardından, int s, , başka bir grup tarafından long'a dönüştürerek çoğaltabilirsiniz.

this düşünün: Bu

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); 
    } 
} 

çıktısı: İlk long minus değerini üretmek için tamsayılar kullanır

-813934592 
7776000000 

Bildirim söyledi. İkinci long minusL, tüm uzun tamsayı değerlerini kullanır.

+0

Bana bunu yap :) +1 – Brian

+0

Teşekkürler, bu benim problemlerimi çözdü :) Ben aslında bir bakış açısı, pauseDays bir INT değeri göz ardı. – user1515310

İlgili konular