HOWTO · Java

Divisione intera in Java

Scopri come funziona la divisione intera in Java, come ottenere il resto e come calcolare un quoziente frazionario convertendo un operando prima della divisione.

In questa pagina

In Java, la divisione tra interi restituisce un quoziente intero e tronca il risultato verso zero. Con due operandi int, 10 / 9 vale 1, mentre 10 / 19 vale 0: Java non arrotonda il quoziente. Usa % per ottenere il resto oppure converti un operando in double prima della divisione se ti serve un risultato frazionario.

Le basi della divisione intera

Questo programma Java completo stampa il quoziente per quattro coppie di valori 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

Con operandi diversi da zero, il quoziente è negativo quando uno solo dei due operandi è negativo. Un quoziente positivo minore di 1, come 10 / 19, diventa 0; anche -10 / 19 diventa 0, perché il troncamento procede verso zero. Se il numeratore è zero, il quoziente è 0 per qualsiasi divisore diverso da zero.

Gestire i resti con l’operatore modulo

L’operatore % restituisce il resto della divisione intera. Usa insieme / e % quando il calcolo richiede entrambi i valori. Con operandi interi con segno in Java, il resto ha il segno del dividendo (l’operando a sinistra) oppure è zero:

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

I valori rispettano la relazione dividend == quotient * divisor + remainder: in questo caso, -10 == (-3 * 3) + (-1). È utile, per esempio, verificare se un intero è pari con numero % 2 == 0. % viene spesso chiamato operatore modulo, ma con valori negativi è bene ricordare che restituisce un resto con segno.

Conversione di tipo per ottenere precisione

Per ottenere un quoziente frazionario, converti almeno un operando in float o double prima che venga eseguita l’operazione /. La conversione fa sì che la divisione avvenga in virgola mobile:

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 conversione avviene prima della divisione: 5 viene trattato come un double e il quoziente conserva la parte frazionaria. Convertire il risultato dopo il calcolo, come in (double) (5 / 2), trasforma soltanto l’intero già calcolato 2 in 2.0; non può recuperare la frazione eliminata. float e double hanno una precisione binaria finita, quindi molte frazioni decimali sono approssimazioni. Per i calcoli di uso generale si usa normalmente double; non fare affidamento su un numero fisso di cifre decimali visualizzate. Per calcoli decimali esatti, come gli importi monetari, usa BigDecimal con una scala e una regola di arrotondamento esplicite.

Errori comuni nella divisione intera

Un divisore intero pari a zero causa un’eccezione ArithmeticException. Controlla il divisore prima di dividere oppure gestisci l’eccezione quando il controllo non è pratico. Per esempio:

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.

Questo controllo è utile quando denominator proviene da un input o da un calcolo. La divisione intera per zero genera un’eccezione prima che l’assegnazione possa terminare. La divisione in virgola mobile segue regole diverse: dividere un valore double o float per zero produce un valore infinito o NaN, anziché questa ArithmeticException intera; se tali risultati non hanno senso per l’applicazione, controllali.

Può sorprendere anche un limite del tipo intero: Integer.MIN_VALUE / -1 supera l’intervallo di int e restituisce Integer.MIN_VALUE. Java non genera un’eccezione per questo overflow. Se sono possibili valori vicini ai limiti del tipo, scegli un tipo più ampio oppure verifica l’intervallo prima di usare il quoziente.

Conclusione

Nella divisione intera in Java, / tronca verso zero e % restituisce il resto con segno. Converti un operando prima della divisione per ottenere un quoziente in virgola mobile e proteggi da zero i divisori interi.

Domande frequenti

Che cosa succede quando si divide un int per zero?
Java genera un’eccezione ArithmeticException. Controlla prima il divisore oppure gestisci l’eccezione.

Come si ottiene un risultato frazionario?
Converti almeno un operando in double o float prima di applicare /.

Come si ottiene il resto?
Usa %, per esempio: int remainder = dividend % divisor;.

Si può usare la divisione intera in un ciclo?
Sì. Ricorda che ogni divisione intera tronca verso zero; se il calcolo del ciclo richiede frazioni, usa un operando in virgola mobile.