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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.