Frage zur Typumwandlung
-
Hallo!
Ich möchte ein Programm zur Umrechnung (Grad Fahrenheit in Grad Celsius) schreiben. Als Ergebnis für Celsius erhalte ich aber immer 0.0000.
Was mache ich hier falsch?
void main(void) { int fahrenheit = 0; float celsius; while (fahrenheit < 10) { celsius = float((5/9)*(fahrenheit-32)); printf("%i Fahrenheit = %f Celsius\n",fahrenheit, celsius); fahrenheit ++; } getchar(); }
-
5/9 ist eine Ganzzahlendivision und somit 0. Schreibe stattdessen 5.0/9.
-
Hallo,
eine richtige Antwort gab es schon, aber da Du ja etwas über Typumwandlung wissen wolltest, hier gibt es die satt (als Beispiel):
#include <stdio.h> void main(void) { int fahrenheit = 0; float celsius; while (fahrenheit < 10) { celsius = (((float)5/(float)9)*(float)(fahrenheit-32)); printf("%i Fahrenheit = %.2f Celsius\n",fahrenheit, celsius); fahrenheit ++; } //getchar(); }
Und so kann man die Ausgabe auch sauber formatieren, wenn die Zahlen größer werden:
#include <stdio.h> void main(void) { int fahrenheit; float celsius; for (fahrenheit = 0; fahrenheit <= 100; fahrenheit += 5) { celsius = (((float)5/(float)9)*(float)(fahrenheit-32)); printf("%3i Fahrenheit = %6.2f Celsius\n",fahrenheit, celsius); } //getchar(); }
Gruß
-
Wieso all diese überflüssigen Casts? Soll das ein Witz sein?
-
_matze schrieb:
Wieso all diese überflüssigen Casts? Soll das ein Witz sein?
Er wollte ein Beispiel für Typumwandlungen haben, nicht mit nimm 5.0 statt 5 abgefertigt werden. Nach Deiner Antwort war der Threadstarter praktisch genau so schlau wie vorher.
Im übrigen, stammt das Beispielsprogrämmchen nicht von mir.
-
CrashX schrieb:
Er wollte ein Beispiel für Typumwandlungen haben, nicht mit nimm 5.0 statt 5 abgefertigt werden.
Quatsch. Lies lieber noch mal genau nach. Er wollte wissen, was er falsch macht. Von einem Beispiel für Typumwandlung hat hier keiner außer dir gesprochen.
CrashX schrieb:
Nach Deiner Antwort war der Threadstarter praktisch genau so schlau wie vorher.
Nach meiner Antwort wusste er, was sein Fehler war.
CrashX schrieb:
Im übrigen, stammt das Beispielsprogrämmchen nicht von mir.
Der von dir gepostete, angepasste Code und vor allem die überall darin verstreuten, überflüssigen Casts sind nicht von dir? Aha.
-
5.0 ist übrigens double, nicht float. float wäre 5.f. Und ein cast hätte völlig gereicht (auch wenn 5.0/5.f natürlich besser sind). Weiter heißt es int main(void), nicht void main(void).
-
cooky451 schrieb:
5.0 ist übrigens double, nicht float.
Natürlich, aber double schadet ja nicht.
Überhaupt würde ich hier eher überall double verwenden.