Necesito convertir un doble a un int en Java, pero el valor numérico siempre debe redondearse hacia abajo. es decir, 99,99999999 -> 99
Necesito convertir un doble a un int en Java, pero el valor numérico siempre debe redondearse hacia abajo. es decir, 99,99999999 -> 99
Respuestas:
La conversión a un int elimina implícitamente cualquier decimal. No es necesario llamar a Math.floor () (asumiendo números positivos)
Simplemente encasilla con (int), por ejemplo:
System.out.println((int)(99.9999)); // Prints 99
Dicho esto, tiene un comportamiento diferente al Math.floor
que redondea hacia el infinito negativo (@Chris Wong)
Math.floor
no produzca un resultado diferente para los números negativos que un simple encasillado.
System.out.println((long)(9.9999e300));
BigDecimal
y las RoundingMode
clases usan ROUND_DOWN
para redondear hacia cero y ROUND_FLOOR
redondear hacia cero . infinito negativo.
Para convertir un doble en un int y redondearlo al entero más cercano (es decir, a diferencia del típico (int)(1.8)
y (int)(1.2)
, que "redondeará hacia abajo" hacia 0 y devolverá 1
), simplemente agregue 0.5 al double
que encasillará en anint
.
Por ejemplo, si tenemos
double a = 1.2;
double b = 1.8;
Luego, las siguientes expresiones de encasillado para xey devolverán los valores redondeados hacia abajo ( 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 agregando 0.5 a cada uno, obtendremos el resultado redondeado al entero 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 pequeña nota , este método también le permite controlar el umbral en el que double
se redondea hacia arriba o hacia abajo al (int)
encasillar.
(int)(a + 0.8);
encasillar. Esto solo se redondeará hacia arriba (int)a + 1
siempre que los valores decimales sean mayores o iguales a 0,2. Es decir, al agregar 0.8 al double
inmediatamente anterior al encasillado, 10.15 y 10.03 se redondearán a la baja a 10 en el (int)
encasillado, pero 10.23 y 10.7 se redondearán a 11.
System.out.println(""+ (int)(-0.8d + 0.5))
imprime 0, en lugar de -1 como se esperaba
Esto funciona bien int i = (int) dbl;
prueba con esto, esto es simple
double x= 20.22889909008;
int a = (int) x;
this will return a=20
o prueba con esto: -
Double x = 20.22889909008;
Integer a = x.intValue();
this will return a=20
o prueba con esto: -
double x= 20.22889909008;
System.out.println("===="+(int)x);
this will return ===20
Puede que estos códigos te ayuden.
En esta pregunta:
1. La conversión de doble a entero es una tarea muy fácil.
2.Pero no está redondeando el valor doble al decimal más cercano. Por lo tanto, el casting se puede hacer así:
double d=99.99999999;
int i=(int)d;
System.out.println(i);
y se imprimirá 99
, pero no se ha redondeado.
Por lo tanto, para redondear podemos usar,
double d=99.99999999;
System.out.println( Math.round(d));
Esto imprimirá la salida de 100
.