conversión de doble a entero en java

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

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

obtienes y=1. Si haces esto

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

Es probable que obtengas 2. Sin embargo, me pregunto: dado que las representaciones dobles de los enteros a veces se ven como 1,9999999998 o algo así, ¿existe la posibilidad de que el casting de un doble creado mediante Math.round() siga dando como resultado un número truncado hacia abajo, en lugar del número redondeado que estamos buscando (es decir: 1 en lugar de 2 en el código representado)?

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

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


He descubierto algo: Math.round(x) devuelve un long, no un double. Por lo tanto: es imposible que Math.round() devuelva un número parecido a 3.9999998. Por lo tanto, int(Math.round()) nunca necesitará truncar nada y siempre funcionará.

Solución

¿Existe la posibilidad de que la fundición de un doble creado a través de Math.round() siga dando como resultado un número truncado hacia abajo?

No, round() siempre redondeará tu doble al valor correcto, y entonces, será lanzado a un long que truncará cualquier lugar decimal. Pero después del redondeo, no quedarán partes fraccionarias.

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

Devuelve el largo más cercano al argumento. El resultado se redondea a un entero sumando 1/2, tomando el piso del resultado, y fundiendo el resultado al tipo long. En otras palabras, el resultado es igual al valor de la expresión:

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

Comentarios (3)

Para el tipo de datos Double a int, puede utilizar lo siguiente:

Double double = 5.00;

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

Resuelto mi propósito.

Comentarios (0)