convirtiendo doble a entero en Java

En Java, quiero convertir un doble en un entero, sé si haces esto:

double x = 1.5; int y = (int)x; 

obtienes y = 1. Si haces esto:

 int y = (int)Math.round(x); 

Es probable que obtenga 2. Sin embargo, me pregunto: dado que las representaciones dobles de números enteros a veces se parecen a 1.9999999998 o algo así, ¿existe la posibilidad de que emitir un doble creado a través de Math.round () aún resulte en un número truncado, en lugar de que el número redondeado que estamos buscando (es decir: 1 en lugar de 2 en el código como se representa)?

(y sí, lo digo como tal: ¿hay algún valor para x, donde y mostrará un resultado que es una representación truncada en lugar de una representación redondeada de x?)

Si es así: ¿hay una forma mejor de convertir un doble en un int redondeado sin correr el riesgo de truncamiento?


Imaginé algo: Math.round (x) devuelve un largo, no un doble. Por lo tanto: es imposible para Math.round () devolver un número que se parezca a 3.9999998. Por lo tanto, int (Math.round ()) nunca necesitará truncar nada y siempre funcionará.

¿Existe la posibilidad de que el lanzamiento de un doble creado a través de Math.round() todavía resulte en un número truncado hacia abajo?

No, round() siempre redondeará su doble al valor correcto, y luego, se lanzará a una long que truncará los decimales. Pero después del redondeo, no quedará ninguna parte fraccionaria.

Aquí están los documentos de Math.round(double) :

Devuelve el más cercano al argumento. El resultado se redondea a un entero agregando 1/2, tomando la palabra del resultado y lanzando el resultado para escribir largo. En otras palabras, el resultado es igual al valor de la expresión:

 (long)Math.floor(a + 0.5d) 

Para el tipo de datos Double to int , puede usar lo siguiente:

 Double double = 5.00; int integer = double.intValue(); 
 Double perValue = 96.57; int roundVal= (int) Math.round(perValue); 

Resolvió mi propósito.

 double a = 1.450; String sa = String.valueOf(a); int lengthUntilPoint = sa.indexOf(".")+1; int power = sa.length() - lengthUntilPoint; int ia = (int) (a* Math.pow(10, power));