BESTE WEBSITE FÜR WEBENTWICKLER
C Sprache. W3Schools auf Deutsch. Unterricht für Anfänger

Ua En Es

C Typkonvertierung


Typkonvertierung

Manchmal müssen Sie den Wert eines Datentyps in einen anderen Typ konvertieren. Dies wird als Typkonvertierung bezeichnet.

Wenn Sie beispielsweise versuchen, zwei ganze Zahlen, 5, durch 2 zu dividieren, würden Sie das erwarten Das Ergebnis ist 2,5. Da wir aber mit Ganzzahlen (und nicht mit Gleitkommawerten) arbeiten, wird das folgende Beispiel nur ausgegeben 2:

Beispiel

int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // Ausgänge 2
Try it Yourself »

Um das richtige Ergebnis zu erhalten, müssen Sie wissen, wie die Typkonvertierung funktioniert.

Es gibt zwei Arten der Konvertierung in C:

  • Implizite Konvertierung (automatisch)
  • Explizite Konvertierung (manuell)

Implizite Konvertierung

Die implizite Konvertierung erfolgt automatisch durch den Compiler, wenn Sie einen Wert eines Typs einem anderen zuweisen.

Zum Beispiel, wenn Sie einem float-Typ einen int-Wert zuweisen:

Beispiel

// Automatische Konvertierung: int in float
float myFloat = 9;

printf("%f", myFloat); // 9.000000
Try it Yourself »

Wie Sie sehen, konvertiert der Compiler automatisch den int-Wert 9 in einen Float-Wert von 9.000000.

Dies kann riskant sein, da Sie in bestimmten Situationen möglicherweise die Kontrolle über bestimmte Werte verlieren.

Vor allem, wenn es umgekehrt wäre – das folgende Beispiel konvertiert automatisch den Float-Wert 9,99 in einen int-Wert von 9:

Beispiel

// Automatische Konvertierung: float in int
int myInt = 9.99;

printf("%d", myInt); // 9
Try it Yourself »

Was ist mit .99 passiert? Vielleicht möchten wir diese Daten in unserem Programm haben! Also sei vorsichtig. Es ist wichtig, dass Sie wissen, wie der Compiler in diesen Situationen funktioniert, um unerwartete Ergebnisse zu vermeiden.

Als weiteres Beispiel: Wenn Sie zwei Ganzzahlen dividieren: 5 durch 2, wissen Sie, das ist die Summe 2.5. Und wie Sie vom Anfang dieser Seite wissen, zeigt das Ergebnis nur die Zahl 2 an, wenn Sie die Summe als Ganzzahl speichern. Daher wäre es besser, die Summe als float oder als double zu speichern, oder?

Beispiel

float sum = 5 / 2;

printf("%f", sum); // 2.000000
Try it Yourself »

Warum ist das Ergebnis 2,00000 und nicht 2,5? Das liegt daran, dass 5 und 2 bei der Division immer noch ganze Zahlen sind. In diesem Fall müssen Sie die Ganzzahlwerte manuell in Gleitkommawerte konvertieren (siehe unten).


Explicit Conversion

Explicit conversion is done manually by placing the type in parentheses () in front of the value.

Considering our problem from the example above, we can now get the right result:

Beispiel

// Manuelle Konvertierung: int in float
float sum = (float) 5 / 2;

printf("%f", sum); // 2.500000
Try it Yourself »

Sie können den Typ auch vor einer Variablen platzieren:

Beispiel

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%f", sum); // 2.500000
Try it Yourself »

Und da Sie im vorherigen Kapitel etwas über „Dezimalgenauigkeit“ gelernt haben, können Sie die Ausgabe noch sauberer gestalten, indem Sie die zusätzlichen Nullen entfernen (wenn Sie möchten):

Beispiel

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5
Try it Yourself »

Beispiel aus dem wirklichen Leben

Hier ist ein Beispiel aus der Praxis, in dem wir ein Programm erstellen, um den Prozentsatz der Punktzahl eines Benutzers im Verhältnis zur maximalen Punktzahl in einem Spiel zu berechnen:

Beispiel

// Stellen Sie die maximal mögliche Punktzahl im Spiel auf 500 ein
int maxScore = 500;

// Die tatsächliche Punktzahl des Benutzers
int userScore = 420;

/* Berechnen Sie den Prozentsatz der Benutzerpunktzahl im Verhältnis zur maximal verfügbaren Punktzahl.
Konvertieren Sie userScore in float, um sicherzustellen, dass die Division korrekt ist */
float percentage = (float) userScore / maxScore * 100.0;

// Drucken Sie den Prozentsatz aus
printf("User's percentage is %.2f", percentage);
Try it Yourself »