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.floorque 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));
BigDecimaly las RoundingModeclases usan ROUND_DOWNpara redondear hacia cero y ROUND_FLOORredondear 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 doubleque 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 = 1y 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 = 1y 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 doublese redondea hacia arriba o hacia abajo al (int)encasillar.
(int)(a + 0.8);
encasillar. Esto solo se redondeará hacia arriba (int)a + 1siempre que los valores decimales sean mayores o iguales a 0,2. Es decir, al agregar 0.8 al doubleinmediatamente 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.