2010-01-26 14 views
62

Necesito convertir un doble en int en Java, pero el valor numérico siempre debe redondearse. es decir, 99.99999999 -> 99¿Cómo convertir un doble a un int en Java redondeándolo hacia abajo?

+0

posible duplicado de [Cómo convertir float a int con Java] (http://stackoverflow.com/questions/1295424/how-to-convert-float-to-int-with-java) –

+0

Creo que flota y los dobles son tipos de datos diferentes en Java. – badpanda

+0

Creo que están demasiado cerca porque ambos son primitivos y tipos de coma flotante. Las respuestas son las mismas y es muy probable que sigan siendo así. –

Respuesta

116

Casting a un int elimina implícitamente cualquier decimal. No hay necesidad de llamar Math.floor() (suponiendo que los números positivos)

Basta con encasillado (int), por ejemplo:

System.out.println((int)(99.9999)); // Prints 99 

Dicho esto, que sí tiene un comportamiento diferente de Math.floor que se redondea hacia el negativo infinito (@ Chris Wong)

+22

Tenga en cuenta que 'Math.floor' * does * produce un resultado diferente para números negativos que un simple encasillado. – Joey

+3

Depende de lo que el OP significa "redondear hacia abajo". El elenco lo redondea "hacia abajo" hacia cero, mientras que Math.floor redondea hacia el infinito negativo. –

+5

También tenga en cuenta que un int no puede representar todos los posibles valores enteros que un doble puede. Si desea truncar un valor de doble precisión, entonces conviértalo en un valor entero de 64 bits como long. 'System.out.println ((long) (9.9999e300));' –

10
Math.floor(n) 

donde n es un doble. Parece que esto realmente devolverá un doble, así que asegúrese de encasillarlo después.

+2

No necesita piso antes del lanzamiento, vea la respuesta de Xorlev. – Mizipzor

+5

@miz: La semántica es diferente para los números negativos, sin embargo. – Joey

0

Pruebe usar Math.floor.

+0

Floor() no es necesario. – TBH

16

(int) 99,99999

Será 99. Al lanzar un doble a un int no redonda, que va a desechar la parte fraccionaria.

+4

+1 por mencionar el truncamiento. –

26

para lanzar un doble a un int y tiene que ser redondeado al número entero más cercano (es decir, a diferencia de la típica (int)(1.8) y (int)(1.2), que tanto "redondear hacia abajo" hacia 0 y volver 1) , simplemente agregue 0.5 al double que va a encasillar en un int.

Por ejemplo, si tenemos

double a = 1.2; 
double b = 1.8; 

Entonces las siguientes expresiones encasillamiento para X e Y, y devolverá los valores descendentes redondeado (x = 1 y y = 1):

int x = (int)(a); // This equals (int)(1.2) --> 1 
int y = (int)(b); // This equals (int)(1.8) --> 1 

Pero añadiendo 0.5 a cada uno, obtendremos el resultado entero redondeado-al-más cercano que podemos desear en algunos casos (x = 1 y y = 2):

int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1 
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2 

Como nota pequeña, este método también permite controlar el umbrala la que el double se redondea hacia arriba o hacia abajo a (int) encasillamiento.

(int)(a + 0.8); 

a typecast. Esto solo redondeará hasta (int)a + 1 siempre que los valores decimales sean mayores o iguales a 0.2. Es decir, al agregar 0.8 al double inmediatamente antes del encasillado, 10.15 y 10.03 se redondearán a 10 al (int) encasillar, pero 10.23 y 10.7 se redondearán a 11.

+5

Tiene toda la razón, no es así. Vi que este hilo aparece cuando busqué "Java int typecast double" y pensé que alguien que buscara una forma de redondear hacia arriba/abajo directamente con el tipo de conversión (int) podría usar esto. Esto no se publica usando una cuenta de stackoverflow (así que no estoy tratando de aumentar mi reputación, si eso se toma en serio aquí), solo intento ayudar a difundir un truco genial que uso con bastante frecuencia. :) ¡Salud! – JavaDrip

+4

Bien, pero recuerda que esto solo funciona con ** positivos ** dobles. Por ejemplo, si redondeas -0.8 con este truco, entonces el código 'System.out.println (" "+ (int) (- 0.8d + 0.5))' imprime 0, en lugar de -1 como se esperaba –

5

new Double(99.9999).intValue()

0

tratar con esto, Esto es simple

double x= 20.22889909008; 
int a = (int) x; 

this will return a=20 

o tratar con esto: -

Double x = 20.22889909008; 
Integer a = x.intValue(); 

this will return a=20 

o tratar con esto: -

double x= 20.22889909008; 
System.out.println("===="+(int)x); 

this will return ===20 

puede ser este código ayudarte.

Cuestiones relacionadas