[java] 1000 * 60 * 60 * 24 * 30 приводит к отрицательному числу


1 Answers

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

На этот вопрос уже есть ответ:

Я пытаюсь вычислить 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

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




У Java есть ограничения, когда дело доходит до примитивных типов данных. Если ваш длинный или двойной слишком большой, то он будет переполняться в отрицательное число. Попробуйте использовать класс BigInteger для хранения больших чисел.

Проверь это:

Как Java обрабатывает целое число с переполнением и переполнением и как вы его проверите?




Related