Dividir enteros con decimales en Java

Si tienes 2 números enteros (Integer o int) y quieres dividirlos te vas a encontrar con que la división se hace como números enteros y por lo tanto no va a tener decimales aunque estés intentando asignárselo a una variable de tipo float o double.


int numeroA = 12;
int numeroB = 23;
double division = numeroA/numeroB;
System.out.println(division);
// 0.0

El motivo es que como ambos números son enteros la división se hace como tal y después de hecha la división se hace la asignación, por eso el 0 se convierte en 0.0.

Para conseguir que el resultado de la división tenga decimales tenemos 2 opciones, la primera es cambiar el tipo de los números a float o a double pero puede que no queramos o podamos hacerlo, en ese caso la solución que tenemos es hacer un cast de al menos uno de los dos números y así al hacer una operación con double o un float y un int la operación se realizará con decimales.


int numeroA = 12;
int numeroB = 23;
double divisionDecimales = (double)numeroA/numeroB;
System.out.println(divisionDecimales);
// 0.5217391304347826

Otra forma de hacer lo mismo pero sin hacer un cast es multiplicar uno de los numero x1.0, x1d o x1f para convertir ese número y conseguiremos el mismo efecto.


int numeroA = 12;
int numeroB = 23;
double division = (numeroA*1.0)/numeroB;
System.out.println(divisionDecimales);
// 0.5217391304347826