Pregunta

Está bien. He dale que dale mi cabeza contra la pared para como 2 horas, ahora tratando de averiguar por qué en el double answer = 364/365; mundo me está diciendo que answer es 0. O cualquier otra combinación de double para el caso, es sólo truncar el decimal y acabo de Don sé por qué.

¿Fue útil?

Solución

364/365 realiza la división de enteros (trunca el decimal).

double answer = 364.0/365; la fuerce a realizar la división de coma flotante.

Algo así como:

double days_in_year = 365;
double answer = 364/days_in_year;

funcionaría también, puesto que uno de los operandos no es un entero.

Otros consejos

Usted está tomando un tipo int (364) y dividiendo por otro tipo int (365) - la respuesta va a ser un int. Esto se almacena entonces en una respuesta de tipo doble. Se podría hacer lo siguiente:

double answer = 364d / 365d;

Más información aquí:

http://mindprod.com/jgloss/division.html

Es necesario hacer hacer doble división. En este momento Java está interpretando como división de enteros y devolver el int truncado.

Lo que necesita es:

double answer = 364 / 365.0;

o

double answer = 364 / (double) 365; 

La razón es que el tipo predeterminado de literales enteros en Java es int y todo el resultado de todo arithemetic basado int está fundido Tipo de nuevo a int. Por lo tanto, aunque su respuesta es 0,997, cuando se typecasted vuelta se convierte en 0:

(int)0.997  = 0

Así que usted puede hacer como esto:

364.0/365.0

o

((float)364)/365

Todas las respuestas anteriores son correctas, sería simplemente añadir que todo se trata de Gigo.

double answer = 364/365;

en el código de tipo doble implica sólo para responder a la expresión variable y aritmética tiene dos operandos de tipo int. Así que la salida de la expresión aritmética es también de tipo int, que es entonces a través de auto arriba de fundición a presión a doble tipo da salida 0.0, al igual que por debajo de ejemplos:

double ans = 4.0/0;

el código anterior dará Infinity salida como uno de los operandos es el número de coma flotante de modo a través de auto tipo de fundición a presión 0 se convierte en 0,0 y el resultado es como por el tipo de datos de punto flotante.

mientras

double ans = 4/0;

dará java.lang.ArithmeticException:. / Por cero excepción en tiempo de ejecución ya que tanto los operandos son de tipo de datos int y lo que la salida es de acuerdo con el tipo de datos entero independientemente de ans tipo de datos variable de ser doble

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top