2008-12-14 25 views
9

He aquí un ejemplo:valor Double devuelve 0

Double d = (1/3); 
System.out.println(d); 

Esto devuelve 0, no 0.33333 ... como debe ser.

¿Alguien sabe?

+0

El posible duplicado de [División en Java siempre da como resultado cero (0)?] (Http://stackoverflow.com/questions/10455677/division-in-java-always-results-in- cero-0) –

+0

@ ΦXocę 웃 Пepeúpa ツ No es un duplicado. Esa pregunta es un duplicado de esta pregunta. Mire las fechas antes de marcar – Zoe

Respuesta

38

Eso es porque 1 y 3 son tratados como integers cuando no se especifica lo contrario, por lo 1/3 evalúa a la integer0 que luego se arrojó sobre la double0. Para solucionarlo, pruebe (1.0/3), o quizás 1D/3 para indicar explícitamente que está tratando con valores dobles.

12

Si tiene int s que desea dividir usando la división de punto flotante, que tendrá que emitir el int a un double:

double d = (double)intValue1/(double)intValue2 

(En realidad, sólo se fundición intValue2 debería ser suficiente para tener la intValue1 ser moldeado a double automáticamente, creo.)

1

uso doble y no doble a menos que necesite utilizar estos Valu es en el sentido del objeto. Tenga en cuenta los conceptos Autoboxing

+0

El OP preguntaba sobre los métodos de truncamiento de Java y por qué una división de enteros se trunca, incluso si se almacena en un doble; no sobre autoboxing. – MathSquared