HOWTO · Csharp
So erhalten Sie durch die Division zweier Ganzzahlen einen Quotienten vom Typ double in C#
Dieses Tutorial stellt die Division zweier ganzer Zahlen vor. Bei der C#-Programmierung hängt der Quotient von der Art der Operanden ab. In diesem Artikel dreht sich unser Hauptanliegen um die Division zweier ganzer Zahlen und darum, Ergebnisse als doppelten Datentyp zu erhalten.
Auf dieser Seite
In C# ist das Ergebnis der Division zweier Ganzzahlen eine Ganzzahl. Damit der Nachkommateil des Quotienten erhalten bleibt, wandeln Sie mindestens einen Operanden in double um, bevor die Division ausgeführt wird. Das ist wichtig, wenn ein Ausdruck einer Gleitkommavariablen zugewiesen wird: Die Zuweisung erfolgt erst nach der Division und kann keine Stellen wiederherstellen, die bei der Ganzzahlarithmetik bereits verworfen wurden.
Warum 30 / 7 bei ganzzahligen Operanden 4 ergibt
Der Operator / verwendet die Typen seiner Operanden, um die Rechenoperation auszuwählen. Haben beide Operanden den Typ int, führt C# eine Ganzzahldivision aus. Bei positiven Werten wird der Nachkommateil verworfen. Deshalb ergibt 30 / 7 den Wert 4 und nicht 4.285714.... Bei vorzeichenbehafteten Ganzzahloperanden wird in Richtung null abgeschnitten; es wird nicht auf die nächste Ganzzahl gerundet.
Dieselbe Regel gilt, wenn die Zielvariable den Typ double hat. In double quotient = 30 / 7; wird zuerst die Ganzzahldivision ausgewertet, die 4 ergibt. Anschließend wird diese Ganzzahl für die Zuweisung in 4.0 umgewandelt. Auch das Umwandeln des fertigen Ausdrucks, wie in (double)(30 / 7), hat dieselbe Einschränkung. Keine der beiden Varianten kann den Nachkommateil wiederherstellen, nachdem ihn die Ganzzahloperation verworfen hat.
Einen Operanden vor der Division umwandeln, um ein double-Ergebnis zu erhalten
Wandeln Sie einen Operanden um, bevor Sie / anwenden. Der Cast (double)n1 ändert den Typ dieses Operanden. Dadurch verwendet die Division Gleitkommaarithmetik und gibt ein double zurück. Auch der andere Operand wird für die Rechenoperation umgewandelt. n1 und n2 können weiterhin Ganzzahlen bleiben; nur der Ausdruck benötigt einen Gleitkommaoperanden.
Führen Sie dieses Beispiel mit den beiden gezeigten ganzzahligen Eingaben aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
using System;
public class DivisionExample
{
public static void Main()
{
int n1 = 30;
int n2 = 7;
int integerQuotient = n1 / n2;
double castQuotient = (double)n1 / n2;
decimal decimalQuotient = (decimal)n1 / n2;
double convertedQuotient = decimal.ToDouble(decimalQuotient);
Console.WriteLine($"Integer division: {integerQuotient}");
Console.WriteLine($"Cast before division: {castQuotient}");
Console.WriteLine($"Convert decimal quotient: {convertedQuotient}");
}
}
Integer division: 4
Cast before division: 4.28571428571429
Convert decimal quotient: 4.28571428571429
Die erste Zeile zeigt den abgeschnittenen ganzzahligen Quotienten. Beim Cast und beim Dezimalpfad bleibt ein Nachkommateil erhalten. Für Eingaben vom Typ int und ein gewünschtes Ergebnis vom Typ double ist der direkte Cast die einfachste Wahl. Wandeln Sie einen der Operanden vor der Division um, nicht erst den Quotienten danach. Wenn die Berechnung durchgehend in einem bestimmten Typ erfolgen soll, deklarieren Sie das Ergebnis mit diesem Typ, damit auch nachfolgende Operationen den vorgesehenen Rechenregeln folgen.
Wann decimal.ToDouble sinnvoll ist
decimal.ToDouble wandelt einen Wert, der bereits den Typ decimal hat, in ein double um. Das ist nützlich, wenn eine frühere Berechnung oder Eingabe einen Dezimalwert ergibt und eine spätere API ein double erwartet. Die Methode wandelt einen int nicht direkt um. Wandeln Sie zuerst die ganzzahligen Operanden in decimal um und führen Sie wie im Beispiel eine Dezimaldivision aus. Übergeben Sie anschließend den Dezimalquotienten an decimal.ToDouble.
Bei zwei ganzzahligen Eingaben, aus denen lediglich ein Quotient mit Nachkommateil berechnet werden soll, ist dieser Weg meist unnötig, da er eine zusätzliche Umwandlung erfordert. Verwenden Sie dafür vorzugsweise (double)n1 / n2. Wählen Sie Dezimalarithmetik nur dann, wenn ihre Dezimaldarstellung zur Basis 10 und ihr Wertebereich zur Anwendung passen; sie macht nicht jeden möglichen Wert und jede Berechnung exakt. Auch ein double hat eine begrenzte Genauigkeit, sodass viele Nachkommawerte nur näherungsweise dargestellt werden. Wählen Sie den Zahlentyp passend zur benötigten Genauigkeit und zum Wertebereich der Berechnung. Gehen Sie nicht davon aus, dass eine Änderung des Typs der Ergebnisvariablen allein auch die Arithmetik des Ausdrucks ändert.