HOWTO · Java

Cómo obtener un resultado decimal al dividir enteros en Java

Aprende por qué la división entre enteros en Java descarta la parte fraccionaria y cómo obtener un cociente decimal mediante conversiones o la combinación de tipos numéricos.

En esta página

Para obtener un cociente fraccionario en Java, convierte al menos uno de los operandos en un valor de coma flotante antes de aplicar /. Al dividir dos valores int, Java realiza una división entera y descarta la parte fraccionaria; asignar después ese resultado a un double no la recupera. Basta con convertir un operando mediante (double) antes de dividir: Java convierte también el otro operando para esa operación, pero no cambia su variable.

Cómo funciona la división entera en Java

Cuando ambos operandos son de tipo entero, Java realiza una división entera. El cociente se redondea hacia cero, por lo que 30 / 8 da 3, no 3.75. Esto ocurre en la propia expresión, antes de asignar o imprimir el resultado. Usa la división entera cuando no necesites la parte fraccionaria, por ejemplo, al calcular una cantidad de unidades completas.

Obtener un resultado double a partir de operandos enteros

Convierte cualquiera de los operandos antes de / para que la división use coma flotante. La conversión cambia el tipo de la expresión de ese operando; después, la promoción numérica binaria convierte el otro operando para esta operación. La variable original de tipo int sigue siendo int.

Ejecuta este ejemplo completo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

public class DivisionExample {
    public static void main(String[] args) {
        int numerator = 30;
        int denominator = 8;
        double quotient = (double) numerator / denominator;
        System.out.println("Integer division: " + (numerator / denominator));
        System.out.println("Cast before division: " + quotient);
        System.out.println("Mixed operands: " + (numerator / 8.0));
        System.out.println("Variable type remains int: " + (numerator));
    }
}
Integer division: 3
Cast before division: 3.75
Mixed operands: 3.75
Variable type remains int: 30

La primera línea realiza una división entera. Convertir un operando antes de / y usar el literal 8.0 producen resultados fraccionarios, mientras que numerator sigue siendo de tipo int.

Dividir tipos numéricos distintos

Si un operando es double y el otro es int, Java convierte el operando int a double para la división, y la expresión es de tipo double. Por ejemplo, 30 / 8.0 da 3.75; el valor 30 sigue siendo entero en su variable original. Un operando float también hace que la operación use coma flotante, pero el tipo del resultado depende de la promoción numérica binaria: con operandos float e int, el resultado es float; al combinar float y double, es double.

Errores frecuentes al dividir

  • Convertir el resultado después de dividir es demasiado tarde. (double) (30 / 8) convierte el 3 entero ya calculado y da 3.0. Convierte antes: (double) 30 / 8.
  • El tipo de la variable de destino no determina la operación. double quotient = 30 / 8; primero realiza una división entera, así que quotient recibe 3.0.
  • Elige float o double según lo que necesites. double ofrece más precisión que float; ambos usan coma flotante binaria y pueden aproximar algunas fracciones decimales. Si necesitas mostrar varios decimales, da formato al valor al imprimirlo.
  • La división por cero depende del tipo de los operandos. Una división entera entre cero lanza ArithmeticException. La división de coma flotante entre cero sigue IEEE 754: un valor distinto de cero dividido entre 0.0 da infinito, mientras que 0.0 / 0.0 da NaN.

Preguntas frecuentes

¿Qué devuelve Java al dividir dos valores int?

La expresión de división produce un resultado entero y descarta cualquier parte fraccionaria al redondear hacia cero. Por ejemplo, 30 / 8 da 3.

¿Cómo obtengo un resultado double a partir de valores enteros?

Convierte un operando antes de dividir, como en (double) numerator / denominator, o usa un literal de coma flotante para uno de los operandos.

¿Puedo dividir un int entre un double?

Sí. Java convierte el int para realizar la operación, y la expresión resultante es de tipo double; el tipo declarado de la variable original no cambia.

¿Cuál es la diferencia entre float y double?

float es un tipo binario de coma flotante IEEE 754 de 32 bits, mientras que double es de 64 bits. Por lo general, double ofrece más precisión y rango, pero ninguno de los dos representa exactamente todas las fracciones decimales.