Aşağıdaki hesaplama neden negatif bir değer üretiyor?Java'da çarpma işlemi negatif sonuçlarla sonuçlanıyor
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
Aşağıdaki hesaplama neden negatif bir değer üretiyor?Java'da çarpma işlemi negatif sonuçlarla sonuçlanıyor
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
orada değerlendirilmektedir her ifade; int * int
yerine long * long
olarak (tabii ki, derleme zamanında bir sabittir). Sonuç bir noktada taşar. Yalnızca işlenen de uzun ürün bazıyapma birlikte kaçmak Tabii
interval = ((60000L * 60L) * 24L) * 30L;
, ama sadece her şeyi değiştirmek daha kolaydır bulmak eğilimindedir: Yani sadece tüm işlenen değişmezleri uzun yapmak için L
kullanın.
long interval = TimeUnit.DAYS.toMillis(30);
Denklemin değeri o kadar büyük bir alana neden olduğu için etrafa sarılır Bir Tamsayı ile sonuçlanır. Int
bu deneyin, negatif olmayacak: Eğer "milisaniye 30 gün-değerinde" kullanmak daha iyi olurdu arıyorsanız
, tüm bu söyledikten sonralong interval = 0;
interval = ((60000L * 60L) * 24L) * 30L;
neden 'interval = 0;'? –
@Prashant Bhate - sadece kopyalanmış OP'nin kodu :) 'aralık = 0;' hiç gerekli değil. – adarshr
Değeriniz, maksimum imzalanan tamsayı değeri 2^31'den (2147483648) büyük olan 2592000000'dür. Buna tamsayı taşması denir, sonuç negatif olarak taşar.
Hesaplamayı çeşitli adımlara ayırın ve hata ayıklayıcıda izleyin. Bu, yanlış gittiği yerleri daha açık bir şekilde göstermelidir. –