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)
Sind bei deinem Compiler die Formate "Float" und "Double" identisch? Wenn nein, solltest du dich entscheiden, was es sein soll.
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.
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) );
Paul schrieb: > Hi, > unter der Code > > double dInitZeit = 0.0; > double dZeit = 0.0; > item.GetDoubleValue(EKEY_DOUBLE_DELAY_TIME,&dInitZeit); und welchen Wert kriegst du hier? Sicherlich nicht den Wert den du glaubst > dZeit = (dInitZeit*1000); > printf( "%04d", (int)((dZeit) + 0.5) );
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.