Printf Ausgabe

Gast #3193077
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
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
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.
Paul schrieb:
> 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.

damit ein Ergebnis von

  3.99999999999

als 4 rauskommt und nicht als 3
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.
Gast
Hi,
unter der Code

double dInitZeit = 0.0;
double dZeit = 0.0;
item.GetDoubleValue(EKEY_DOUBLE_DELAY_TIME,&dInitZeit);
dZeit = (dInitZeit*1000);
printf( "%04d", (int)((dZeit) + 0.5) );

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.