Wie konvertiere ich int in C in Float?

Lesezeit: 2 Minuten

Benutzer-Avatar
Jack

Ich versuche zu lösen:

int total=0, number=0;
float percentage=0.0;

percentage=(number/total)*100;
printf("%.2f", percentage);

Wenn der Wert der Zahl 50 ist und die Summe 100 ist, sollte ich 50,00 als Prozentsatz erhalten, und das ist, was ich will. Aber ich bekomme immer 0.00 als Antwort und habe viele Änderungen an den Typen versucht, aber sie haben nicht funktioniert.

  • Weil die int Teil von 50/100 (= 0,5) ist 0

    – Michael

    23. November 2012 um 13:39 Uhr

Benutzer-Avatar
Daniel Fischer

Ganzzahlige Division schneidet ab, also (50/100) ergibt 0. Sie können umwandeln float (besser double) oder mit multiplizieren 100.0 (zum double Präzision, 100.0f zum float Präzision) zuerst,

double percentage;
// ...
percentage = 100.0*number/total;
// percentage = (double)number/total * 100;

oder

float percentage;
// ...
percentage = (float)number/total * 100;
// percentage = 100.0f*number/total;

Da Gleitkomma-Arithmetik nicht assoziativ ist, sind die Ergebnisse von 100.0*number/total und (double)number/total * 100 kann etwas anders sein (dasselbe gilt für float), aber es ist äußerst unwahrscheinlich, dass die ersten beiden Stellen nach dem Komma beeinflusst werden, daher spielt es wahrscheinlich keine Rolle, welchen Weg Sie wählen.

  • Ersteres führt die Berechnung mit doppelter Genauigkeit durch, letzteres mit einfacher Genauigkeit. Sie sind also möglicherweise nicht gleichwertig. Verwenden 100.0f um ein Float-Literal zu erhalten.

    – Ludin

    23. November 2012 um 14:23 Uhr

Ganzzahldivision in C schneidet das Ergebnis so ab 50/100 werde dir geben 0

Wenn Sie das gewünschte Ergebnis erzielen möchten, versuchen Sie Folgendes:

((float)number/total)*100

oder

50.0/100

Nein, weil Sie den Ausdruck mit ganzen Zahlen machen, also dividieren Sie die ganze Zahl 50 durch die ganze Zahl 100, das ergibt die ganze Zahl 0. Geben Sie einen von ihnen zu a um float und es sollte funktionieren.

Sie führen ganzzahlige Arithmetik durch, also ist das Ergebnis korrekt. Versuchen

percentage=((double)number/total)*100;

Übrigens die %f erwartet ein double kein float. Durch reines Glück wird das hier umgerechnet, damit es gut klappt. Aber im Allgemeinen würden Sie meistens verwenden double als Fließkommatyp in C heutzutage.

Ich multipliziere routinemäßig mit 1,0, wenn ich Fließkommazahlen haben möchte, das ist einfacher, als sich an die Regeln zu erinnern.

Benutzer-Avatar
VIELÜberlauf

Dies sollte Ihnen das gewünschte Ergebnis liefern.

double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);

Beachten Sie, dass der erste Operand ein Double ist

Benutzer-Avatar
Lundin

Ändern Sie Ihren Code in:

int total=0, number=0;
float percentage=0.0f;

percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);

1364660cookie-checkWie konvertiere ich int in C in Float?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy