HOWTO · Java
Java-Division mit Fließkommaergebnis
So erhalten Sie bei der Division ganzzahliger Werte in Java ein Fließkommaergebnis: durch vorheriges Umwandeln eines Operanden oder einen Fließkommaoperanden.
Auf dieser Seite
Um in Java einen Quotienten mit Nachkommastellen zu erhalten, muss vor der /-Operation mindestens ein Operand ein Fließkommawert sein. Bei der Division zweier int-Werte wird ganzzahlig dividiert und der Nachkommateil verworfen. Wird das Ergebnis anschließend einer double-Variablen zugewiesen, lässt sich der verworfene Anteil nicht zurückholen. Es genügt, einen Operanden vor der Division mit (double) umzuwandeln. Java passt den anderen Operanden für diese Operation an, ohne dessen Variable zu ändern.
Ganzzahldivision in Java
Sind beide Operanden ganzzahlige Typen, führt Java eine Ganzzahldivision aus. Der Quotient wird gegen null gerundet: 30 / 8 ergibt also 3 und nicht 3.75. Das geschieht bereits im Ausdruck, vor einer Zuweisung oder Ausgabe. Verwenden Sie Ganzzahldivision, wenn der Nachkommateil absichtlich entfallen soll, etwa beim Berechnen einer ganzzahligen Anzahl.
Ein Fließkommaergebnis aus ganzzahligen Operanden erhalten
Wandeln Sie einen der Operanden vor / um, damit die Division mit Fließkommaarithmetik erfolgt. Durch die Umwandlung ändert sich der Typ dieses Operanden-Ausdrucks; anschließend wandelt die binäre numerische Promotion den anderen Operanden für diese Operation um. Die ursprüngliche int-Variable bleibt vom Typ int.
Führen Sie dieses vollständige Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
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
Die erste Zeile verwendet Ganzzahldivision. Das Umwandeln vor / und das Literal 8.0 führen zu Ergebnissen mit Nachkommastellen; numerator bleibt dabei ein int. Die Beschriftungen und die Ausgabe im unveränderten Beispiel sind weiterhin auf Englisch.
Gemischte numerische Typen dividieren
Ist ein Operand vom Typ double und der andere vom Typ int, wandelt Java den int-Operanden für die Division in double um; der Ausdruck hat dann den Typ double. Zum Beispiel ergibt 30 / 8.0 den Wert 3.75. Die Variable mit dem Wert 30 bleibt davon unberührt. Auch ein float-Operand bewirkt eine Fließkommaoperation. Der Ergebnistyp richtet sich jedoch nach der binären numerischen Promotion: Bei float und int ist das Ergebnis vom Typ float, bei der Kombination aus float und double vom Typ double.
Häufige Fehler bei der Division
- Nach der Division umzuwandeln ist zu spät.
(double) (30 / 8)wandelt die bereits berechnete Ganzzahl3um und ergibt3.0. Wandeln Sie vorher um:(double) 30 / 8. - Der Zieltyp bestimmt die Operation nicht. Bei
double quotient = 30 / 8;wird weiterhin zuerst ganzzahlig dividiert.quotienterhält daher3.0. - Wählen Sie bewusst zwischen
floatunddouble.doubleist genauer alsfloat. Beide verwenden binäre Fließkommaarithmetik und können manche Dezimalbrüche nur näherungsweise darstellen. Wenn Sie viele Nachkommastellen ausgeben, formatieren Sie den Wert bei der Ausgabe. - Bei einer Division durch null kommt es auf die Operandentypen an. Eine Ganzzahldivision durch null löst eine
ArithmeticExceptionaus. Bei Fließkommazahlen richtet sich das Verhalten nach IEEE 754: Ein Wert ungleich null geteilt durch0.0ergibt eine Unendlichkeit;0.0 / 0.0ergibtNaN.
Häufig gestellte Fragen
Was gibt Java bei der Division zweier int-Werte zurück?
Der Divisionsausdruck hat ein ganzzahliges Ergebnis. Ein möglicher Nachkommateil wird durch Rundung gegen null verworfen. Beispielsweise ergibt 30 / 8 den Wert 3.
Wie erhalte ich aus ganzzahligen Werten ein Ergebnis vom Typ double?
Wandeln Sie einen Operanden vor der Division um, etwa mit (double) numerator / denominator, oder verwenden Sie für einen Operanden ein Fließkommaliteral.
Kann ich einen int-Wert durch einen double-Wert teilen?
Ja. Java wandelt den int-Wert für diese Operation um, und der Ausdruck hat den Typ double. Der deklarierte Typ der ursprünglichen Variable ändert sich dadurch nicht.
Worin unterscheiden sich float und double?
float ist ein 32-Bit-Fließkommatyp nach IEEE 754, double ein 64-Bit-Typ. double bietet im Allgemeinen mehr Genauigkeit und einen größeren Wertebereich; keiner der beiden Typen kann jedoch jeden Dezimalbruch exakt darstellen.