HOWTO · Java
Ganzzahldivision in Java
Erfahren Sie, wie Java Ganzzahldivision ausführt, Reste behandelt und durch Umwandlung vor der Division Nachkommastellen erhält.
Auf dieser Seite
Bei der Ganzzahldivision in Java ergibt sich ein ganzzahliger Quotient; Nachkommastellen werden in Richtung null abgeschnitten. Bei zwei Operanden vom Typ int ist 10 / 9 gleich 1, während 10 / 19 den Wert 0 ergibt. Java rundet den Quotienten nicht. Mit % erhalten Sie den Rest. Wenn Sie ein Ergebnis mit Nachkommastellen benötigen, wandeln Sie vor der Division mindestens einen Operanden in double um.
Grundlagen der Ganzzahldivision
Dieses vollständige Java-Programm gibt die Quotienten für vier Paare von int-Werten aus:
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
Bei Operanden ungleich null ist der Quotient negativ, wenn genau ein Operand negativ ist. Ein positiver Quotient kleiner als 1, etwa bei 10 / 19, wird zu 0; auch -10 / 19 ergibt 0, weil das Abschneiden in Richtung null erfolgt. Ist der Zähler null, ist der Quotient bei jedem Divisor ungleich null ebenfalls 0.
Reste mit dem Modulooperator behandeln
Der Operator % gibt den Rest einer Ganzzahldivision zurück. Verwenden Sie / und % gemeinsam, wenn Sie beide Werte benötigen. Bei vorzeichenbehafteten Ganzzahloperanden in Java hat der Rest das Vorzeichen des Dividenden (des linken Operanden) oder ist null:
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
Es gilt dividend == quotient * divisor + remainder; hier also -10 == (-3 * 3) + (-1). Das ist beispielsweise für eine Prüfung wie number % 2 == 0 nützlich, mit der Sie feststellen können, ob eine Ganzzahl gerade ist. % wird in Java häufig Modulooperator genannt. Bei negativen Werten sollten Sie jedoch sein Verhalten als vorzeichenbehafteter Rest berücksichtigen.
Genauigkeit durch Typumwandlung
Wenn Sie einen Quotienten mit Nachkommastellen benötigen, wandeln Sie mindestens einen Operanden in float oder double um, bevor / ausgewertet wird. Durch die Umwandlung wird eine Gleitkommadivision ausgeführt:
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
Die Umwandlung geschieht vor der Division. Dadurch wird 5 als double behandelt und der Quotient behält seinen Nachkommaanteil. Eine Umwandlung erst danach, etwa (double) (5 / 2), wandelt nur die bereits berechnete Ganzzahl 2 in 2.0 um; der verworfene Nachkommaanteil lässt sich so nicht zurückholen. float und double haben eine begrenzte binäre Genauigkeit, weshalb viele Dezimalbrüche nur näherungsweise dargestellt werden. Für gewöhnliche Berechnungen ist double meist die passende Wahl. Verlassen Sie sich nicht auf eine feste Anzahl angezeigter Nachkommastellen. Für exakte Dezimalrechnungen, etwa mit Geldbeträgen, verwenden Sie BigDecimal mit einer ausdrücklich festgelegten Skala und Rundungsregel.
Häufige Stolperfallen bei der Ganzzahldivision
Ein ganzzahliger Divisor mit dem Wert null löst eine ArithmeticException aus. Prüfen Sie den Divisor vor der Division oder fangen Sie die Ausnahme ab, wenn eine Prüfung nicht praktikabel ist. Zum Beispiel:
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.
Diese Prüfung ist nützlich, wenn denominator aus einer Eingabe oder Berechnung stammt. Eine Ganzzahldivision durch null löst die Ausnahme aus, bevor eine Zuweisung abgeschlossen werden kann. Bei Gleitkommadivision gelten andere Regeln: Eine Division eines double- oder float-Werts durch null ergibt Infinity oder NaN statt dieser ArithmeticException. Prüfen Sie solche Ergebnisse, wenn sie für die Anwendung keine sinnvolle Bedeutung haben.
Auch eine Ganzzahlgrenze kann überraschen: Integer.MIN_VALUE / -1 läuft über den Wertebereich von int hinaus und ergibt Integer.MIN_VALUE. Java löst bei diesem Überlauf keine Ausnahme aus. Wenn Werte nahe den Typgrenzen auftreten können, verwenden Sie einen größeren Typ oder prüfen Sie den Wertebereich, bevor Sie sich auf den Quotienten verlassen.
Fazit
Bei der Ganzzahldivision in Java schneidet / in Richtung null ab; % liefert den vorzeichenbehafteten Rest. Wandeln Sie vor der Division einen Operanden um, wenn Sie einen Gleitkommaquotienten benötigen, und sichern Sie ganzzahlige Divisoren gegen den Wert null ab.
FAQ
Was passiert, wenn ein int durch null geteilt wird?
Java löst eine ArithmeticException aus. Prüfen Sie zuerst den Divisor oder fangen Sie die Ausnahme ab.
Wie erhalte ich ein Ergebnis mit Nachkommastellen?
Wandeln Sie mindestens einen Operanden vor der Division mit / in double oder float um.
Wie erhalte ich den Rest?
Verwenden Sie %, zum Beispiel int remainder = dividend % divisor;.
Kann ich Ganzzahldivision in einer Schleife verwenden?
Ja. Beachten Sie, dass jede Ganzzahldivision in Richtung null abschneidet. Benötigt die Schleifenberechnung Nachkommastellen, verwenden Sie einen Gleitkommaoperanden.