java android math long-integer negative-number

java - 60*60*5



1000*60*60*24*30 da como resultado un nĂºmero negativo (4)

Esta pregunta ya tiene una respuesta aquí:

Estoy intentando calcular 30 días multiplicando milisegundos, sin embargo, el resultado continúa siendo un número negativo para el valor de days_30 y no estoy seguro de por qué.

¡Cualquier sugerencia es bienvenida!

FRAGMENTO DE CÓDIGO:

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

los resultados del valor days_30 en: -1702967296

PD

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

Resultados en un número más pequeño, pero aún negativo. -1.702967296E9


Está multiplicando ints juntos, y se produce un desbordamiento porque el entero máximo es 2^31 - 1 . Solo después de las multiplicaciones se convierte a una long . Echa el primer número como un long .

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

o usa un long literal:

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

Eso obligará a operaciones matemáticas long desde el principio.


Simplemente cambie su multiplicación por long days_30 = 1000L * 60 * 60 * 24 * 30;


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