Printf Ausgabe

Gast #3193077
Lesenswert?

Hi,

wie kann eine Zeit, die ich in Sekunde bekommen in ms umrechen und mit 
Hilfe von printf mit 4 Zahlen anzeigen
Beispiel:
double dInitZeit= 0,031(s);
double dZeit =dInitZeit*1000(s);
Für die Ausgabe möchte ich jedes mal kein komma anzeigen sonder nur 
sZeit mit 4 numerische(z.B. 0031) Werte.
Ich habe so probiert aber geht nicht.
printf( "%f", dZeit );
printf( "%04f", dZeit  );

Danke
#3193085
Lesenswert?

Paul schrieb:
> Hi,
>
> wie kann eine Zeit, die ich in Sekunde bekommen in ms umrechen und mit
> Hilfe von printf mit 4 Zahlen anzeigen
> Beispiel:
> double dInitZeit= 0,031(s);


Gleitkommazahlen werden in Programmiersprachen mit einem PUNKT 
geschrieben (amerikanische Schreibweise!)

Das hier, mit einem Komma, compiliert auch. Aber es bedeutet in C etwas 
völlig anderes.

> double dZeit =dInitZeit*1000(s);

> Für die Ausgabe möchte ich jedes mal kein komma anzeigen sonder nur
> sZeit mit 4 numerische(z.B. 0031) Werte.
> Ich habe so probiert aber geht nicht.
> printf( "%f", dZeit );
> printf( "%04f", dZeit  );

Und was genau bedeutet jetzt 'geht nicht'?

Wenn du keine Kommazahlen haben willst, dann willst du ganze Zahlen 
haben. Eine ganze Zahl nennt sich in Programmiersprachen ein Integer. In 
C zb ein int. Wenn du also deine double zuerst in einen int umwandelst, 
dann sind die Kommastellen automatisch weg.


   printf( "%04d", (int)(dZeit + 0.5) );

(Ich geh mal davon aus, dass dZeit nicht negative werden wird, denn dann 
müsste man die Rundungskorrektur in die andere Richtung machen. Und ich 
geh davon aus, dass deine Zeiten nicht so groß werden, dass sie nicht 
mehr in einen int passen. Sonst müsste man zb auf long ausweichen)
Gast #3193104
Lesenswert?

Hi,

erstmal danke für die Rückmeldung.
dInitZeit kann positiv/negativ sein. Ich muss mir nur es merken, wenn es 
negativ ist dann bei der Ausgabe das Vorzeichen vorne anhängen.
Ich verstehe nich warum Du dZeit +0.5 addiere.
#3193176
Lesenswert?

Paul schrieb:
> als Ausgabe bekomme ich :312000001

ja, dann hast du irgendwas falsch gemacht.

Ändert aber nichts daran, dass man beim Übergang double -> int meistens 
eine Rundungskorrektur anbringt. Denn Floating Point rechnen krankt nun 
mal an den kleinen Rundungsfehlern, die einem das Leben schwer machen. 
Wer zu 0  10-mal 0.1 addiert und erwartet, dass da exakt 1.0 rauskommt, 
der hat mit Zitronen gehandelt.

WEnn du zum Rest Hilfe brauchst, dann poste deinen Code. Hier weiß ja 
niemand welche 5 anderen Fehler sich sonst noch so in deinem Code 
verstecken.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren