Guten Tag, ich fange gerade mit dem C lernen an. Dabei habe ich ein Problem bei der Konvertierung eines Double-Typen in einen Integer-Typen. Wenn ich es mit C++ schreibe, funktioniert mein Programm problemlos, wenn ich es aber in C schreibe, ist die Ausgabe fehlerhaft. Hier mein Code: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double gkzahl; int gkzahlint; printf("Bitte geb eine Gleitkommazahl ein!"); scanf("%f", &gkzahl); gkzahlint= (int)gkzahl; printf("\n\n\n%f konvertiert in einen Integer sieht so aus: %d\n\n\n", gkzahl, gkzahlint); system("PAUSE"); return 0; } Als Ergebnis wird immer 2000592436 ausgegeben. Kann mir jemand erklären, warum das so ist?
Zumindest bei Scanf solltest du %lf verwenden anstatt %f.
Danke sehr, "%f" zu "%lf" geändert und schon klappt es. :) MfG
wobei man bei einem einfachen Abschneiden der Nachkommastellen fast schon nicht von Konvertierung sprechen kann
Vlad Tepesch schrieb: > wobei man bei einem einfachen Abschneiden der Nachkommastellen fast > schon nicht von Konvertierung sprechen kann Was soll es denn sonst sein? Die interne Darstellung wird an dieser Stelle ja schon konvertiert. Es fehlt lediglich das Runden, falls das überhaupt erwünscht ist.
Tobi schrieb: > Vlad Tepesch schrieb: >> wobei man bei einem einfachen Abschneiden der Nachkommastellen fast >> schon nicht von Konvertierung sprechen kann > > Was soll es denn sonst sein? Die interne Darstellung wird an dieser > Stelle ja schon konvertiert. Es fehlt lediglich das Runden, falls das > überhaupt erwünscht ist. Meistens ist es erwünscht. 29.999999 ist nun mal praktisch gesehen 30 und nicht 29
>Karl Heinz Buchegger schrieb: > Meistens ist es erwünscht. > 29.999999 ist nun mal praktisch gesehen 30 und nicht 29 Meistens schon, aber nicht immer. Es gab vor Jahren mal eine lustige Printwerbung für einen µC. Zur Verdeutlichung seiner Gleitkommagenauigkeit war eine im Bau befindliche Brücke abgebildet. Wenn man genau hingeschaut hat, konnte man erkennen, daß sich die Fahrbahnhälften in der Mitte nicht treffen werden :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.