¿Por qué el siguiente cálculo produce un valor negativo?La operación de multiplicación en Java está dando como resultado un valor negativo
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
¿Por qué el siguiente cálculo produce un valor negativo?La operación de multiplicación en Java está dando como resultado un valor negativo
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
Cada expresión en allí se está evaluando (en tiempo de compilación, por supuesto, es una constante) como int * int
en lugar de long * long
. El resultado se desborda en algún punto. Así que sólo tiene que utilizar L
para que todos los literales de operando larga:
interval = ((60000L * 60L) * 24L) * 30L;
Por supuesto que podría salirse con la única haciendo algunos de los operandos anhela, pero tiendo a encontrar que es más fácil simplemente cambiar todo.
Una vez dicho todo esto, si usted está buscando "30 días por valor de milisegundos" sería mejor utilizar:
long interval = TimeUnit.DAYS.toMillis(30);
Debido a que el valor de la ecuación está causando un número tan grande que se envuelve alrededor de resultado será un entero. Int
probar esto, no va a ser negativo:
long interval = 0;
interval = ((60000L * 60L) * 24L) * 30L;
¿por qué 'interval = 0;'? –
@Prashant Bhate - acaba de copiar el código de OP :) 'interval = 0;' no es necesario en absoluto. – adarshr
Su valor es 2592000000 que es mayor que el valor entero máximo con signo 2^31 (2147483648). Esto se conoce como desbordamiento de enteros, el resultado se desborda en negativo.
Divida el cálculo en varios pasos y realice un seguimiento en el depurador. Eso debería demostrar dónde va mal más claramente. –