Читать книгу C# - Grundlagen für Beginner - Sven Heinrich - Страница 9
ОглавлениеKonvertierung von Datentypen
Doch was machst Du, wenn Du den „falschen“ Datentyp hast und dennoch das richtige Ergebnis bekommen möchtest?
Cast (Typenkonvertierung)
Dann muss der Datentyp per Code umgewandelt, bzw. konvertiert werden. Dieses nennt man „casten“.
Es gibt zwei Arten, wie diese Umwandlung von Datentypen durchgeführt werden kann:
a) Die implizierte (automatische) Umwandlung
b) Die explizite (manuelle) Umwandlung
Die implizierte (automatische) Umwandlung
Bei der automatischen Umwandlung brauchst Du nichts weiter zu unternehmen, das Programm erkennt und wandelt von sich aus den Datentypen im Hintergrund um.
Beispielsweise wird ein int automatisch in ein long, aber ein int nicht automatisch in ein float umgewandelt.
Warum nicht?
Recht einfach, in dem Datentyp int kannst Du eine viel größere Zahl speichern als in einen float. Folglich kann bei einer automatischen Umrechnung ein Verlust entstehen, da eventuell nicht die ganze Zahl verarbeitet werden kann. Beispiel: „int in float“ (funktioniert nicht):
Die explizite (manuelle) Umwandlung
Hier muss manuell mit einem sogenannten „Cast-Operator“ eingegriffen werden. Zur Konvertierung mit einem Cast-Operator wird vor die betroffene Variable, die umgewandelt werden soll, in Klammern der neue Datentyp geschrieben.
Im Beispiel soll der int von „zahl1“ oder „zahl2“ in ein float umgewandelt werden. Es reicht aus, wenn nur eine von beiden Zahlen umgewandelt wird, um das richtige Ergebnis zu erhalten. In diesem Fall wird der Cast „(float)“ vor die int-Variable gesetzt. Beispiel: „int in float“ (funktioniert):
oder
Bei beiden Varianten erhältst Du als Ergebnis wieder 3,333333.
Vorsicht beim Casten
Durch das manuelle Eingreifen und Ändern von Datentypen, wird vom Programm die Möglichkeit der Speicherung nicht mehr überprüft. Bei falscher Anwendung des Cast-Operators kann es deshalb zu unerwünschten Datenverlusten kommen.
Beispiel:Du möchtest eine int-Variable in eine short-Variable umwandeln. Automatisch erfolgt diese Umwandlung nicht, da der int-Datentyp einen wesentlich größeren Zahlenbereich fassen kann als der short-Datentyp. Wenn nun dennoch folgendes programmiert wird:
Dann erhalten wir als Ergebnis für „kleineZahl“: -15536! Wir haben einen Datenverlust, da der Zahlenbereich von dem short-Datentyp bei 32.767 aufhört! Aus diesem Grund sollte der Cast-Operator nur angewendet werden, wenn sicher ist, dass der neue Datentyp auch die vorhandenen Daten erfassen kann.