Kann keine Kommazahl ausgeben
-
Hallo
Ich habe ein Problem. Ich möchte eine Kommazahl ausgeben doch das Problem ist, dass die ausgegebene Zahl immer eine ganze Zahl ist.
Quellcode:
______________________________
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>int main(int argc, char *argv[])
{
float b = 100/3;
printf("%f", b);
printf("\n");
getch();
return 0;
}
______________________________
Ausgabe:
33.000000Warum die ganze Zahl nicht ausgegeben wird, ist mir ein Rätsel
-
Mach mal:
float b = 100.0/3.0;
C kann nicht erkennen das die Zahlen in Gleitkommazahlen umgewandelt werden sollen.
-
Außerdem ist %f für double und nicht für float! Aktiviere mal die Warnungen bei deinem Compiler. Der sollte dich nämlich vor solchen Fehlern warnen. Aber ich würde eh standardmäßig double nehmen und float nur, wenn es dafür spezielle Gründe gibt. Du wirst dich noch über die höhere Präzision freuen.
btw. benutze bitte die [cpp]-Tags für code!
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ok danke,
was muss ich beim Compiler genau aktivieren?
und was muss man für eine float Variable im printf Befehl eingeben, damit diese ausgegeben wird?
-
rüdiger schrieb:
Außerdem ist %f für double und nicht für float! Aktiviere mal die Warnungen bei deinem Compiler. Der sollte dich nämlich vor solchen Fehlern warnen. Aber ich würde eh standardmäßig double nehmen und float nur, wenn es dafür spezielle Gründe gibt. Du wirst dich noch über die höhere Präzision freuen.
Das ist falsch.
%f gilt für printf in ANSI C sowohl für float wie für double.
Und wenn man Wert auf "höhere Präzision" legt, nimmt man long double, falls der Compiler hier überhaupt eine höhere Präzision anbietet, gängige Systeme haben meistens jedenfalls sizeof(float)==sizeof(double).
-
rüdiger schrieb:
Außerdem ist %f für double und nicht für float! Aktiviere mal die Warnungen bei deinem Compiler. Der sollte dich nämlich vor solchen Fehlern warnen. Aber ich würde eh standardmäßig double nehmen und float nur, wenn es dafür spezielle Gründe gibt. Du wirst dich noch über die höhere Präzision freuen.
btw. benutze bitte die [cpp]-Tags für code!
Das %f ist schon in Ordnung. printf akzeptiert eh nur double. Der Compiler setzt das schon richtig um. Den Modifiere %lf gibt es bei printf nicht.
Bei scanf ist das was anderes.
-
Triton90 schrieb:
ok danke,
was muss ich beim Compiler genau aktivieren?
und was muss man für eine float Variable im printf Befehl eingeben, damit diese ausgegeben wird?
float f = 1./3; printf( "%f", f );
Wobei floats als Funktionsargument sowieso implizit zu double konvertiert werden.
Für numerische Operationen/Ausdrücke verwendet C standardmäßig int, d.h.1/3 -> 0 1./3 -> 0.333 1.0/3 -> 0.333 1/3. -> 0.333 1/3.0 -> 0.333 (float)1/3 -> 0.333 ...
-
cool danke