HOWTO · Java

División entera en Java

Aprende cómo funciona la división entera en Java, cómo obtener el resto y cómo calcular cocientes fraccionarios con conversiones a coma flotante.

En esta página

En Java, la división entre enteros devuelve un cociente entero y trunca hacia cero. Con dos operandos int, 10 / 9 da 1, mientras que 10 / 19 da 0; Java no redondea el cociente. Usa % para obtener el resto o convierte un operando a double antes de dividir si necesitas un resultado fraccionario.

Conceptos básicos de la división entera

Este programa Java completo imprime el cociente de cuatro pares de valores int:

public class IntegerDivision {
    public static void main(String[] args) {
        int first = 10 / 9;
        int second = -10 / 9;
        int third = 10 / -9;
        int fourth = 10 / 19;

        System.out.println(first);
        System.out.println(second);
        System.out.println(third);
        System.out.println(fourth);
    }
}
1
-1
-1
0

Si los operandos son distintos de cero, el cociente es negativo cuando exactamente uno de ellos es negativo. Un cociente positivo menor que 1, como 10 / 19, se convierte en 0; -10 / 19 también se convierte en 0, porque el truncamiento avanza hacia cero. Si el numerador es cero, el cociente es 0 para cualquier divisor distinto de cero.

Cómo obtener el resto con el operador módulo

El operador % devuelve el resto de una división entera. Usa / y % juntos cuando el cálculo necesite ambos valores. En Java, con operandos enteros con signo, el resto tiene el signo del dividendo (el operando de la izquierda), o es cero:

public class QuotientAndRemainder {
    public static void main(String[] args) {
        int dividend = -10;
        int divisor = 3;
        int quotient = dividend / divisor;
        int remainder = dividend % divisor;

        System.out.println("Quotient: " + quotient);
        System.out.println("Remainder: " + remainder);
    }
}
Quotient: -3
Remainder: -1

Los valores cumplen dividend == quotient * divisor + remainder: en este caso, -10 == (-3 * 3) + (-1). Esto resulta útil para comprobaciones como number % 2 == 0, que permite saber si un entero es par. Aunque a % se le suele llamar operador módulo en Java, conviene recordar que con valores negativos se comporta como una operación de resto con signo.

Conversiones de tipo para obtener precisión

Para obtener un cociente fraccionario, convierte al menos un operando a float o double antes de evaluar /. La conversión hace que la operación sea una división de coma flotante:

public class FloatingPointDivision {
    public static void main(String[] args) {
        int numerator = 5;
        int denominator = 2;
        double result = (double) numerator / denominator;

        System.out.println(result);
    }
}
2.5

La conversión ocurre antes de la división, por lo que 5 se trata como un double y el cociente conserva su parte fraccionaria. Convertir después, como en (double) (5 / 2), solo transforma el 2 entero ya calculado en 2.0; no puede recuperar la fracción descartada. float y double tienen una precisión binaria finita, por lo que muchas fracciones decimales son aproximaciones. Para cálculos de propósito general suele bastar double; no dependas de que se muestre siempre una cantidad fija de decimales. Para operaciones decimales exactas, como importes monetarios, usa BigDecimal con una escala y una política de redondeo explícitas.

Errores comunes en la división entera

Un divisor entero igual a cero provoca una ArithmeticException. Comprueba el divisor antes de dividir o captura la excepción cuando no resulte práctico comprobarlo. Por ejemplo:

public class SafeDivision {
    public static void main(String[] args) {
        int numerator = 10;
        int denominator = 0;

        if (denominator == 0) {
            System.out.println("Cannot divide by zero.");
        } else {
            System.out.println(numerator / denominator);
        }
    }
}
Cannot divide by zero.

Esta comprobación es útil cuando denominator procede de la entrada del usuario o de otro cálculo. La división entera entre cero lanza la excepción antes de que pueda completarse la asignación. La división de coma flotante sigue reglas distintas: dividir un double o un float entre cero produce un valor infinito o NaN, no esta ArithmeticException de la división entera. Comprueba esos resultados si no tienen sentido para la aplicación.

También puede sorprender otro límite de los enteros: Integer.MIN_VALUE / -1 desborda el rango de int y da como resultado Integer.MIN_VALUE. Java no lanza una excepción por ese desbordamiento. Si pueden aparecer valores próximos a los límites del tipo, elige un tipo más amplio o valida el rango antes de usar el cociente.

Conclusión

En la división entera de Java, / trunca hacia cero y % devuelve el resto con signo. Convierte un operando antes de dividir para obtener un cociente de coma flotante y comprueba que los divisores enteros no sean cero.

Preguntas frecuentes

¿Qué ocurre al dividir un int entre cero?

Java lanza una ArithmeticException. Comprueba primero el divisor o captura la excepción.

¿Cómo obtengo un resultado fraccionario?

Convierte al menos un operando a double o float antes de aplicar /.

¿Cómo obtengo el resto?

Usa %, por ejemplo: int remainder = dividend % divisor;.

¿Puedo usar la división entera en un bucle?

Sí. Ten en cuenta que cada división entera trunca hacia cero; usa un operando de coma flotante si el cálculo del bucle necesita fracciones.