Forum: Compiler & IDEs Zahlen formatieren.


von flyingwolf (Gast)


Lesenswert?

Einen guten Morgen allen Forenusern,
mich beschäftigt ein Frage zur Formatierten Ausgabe von Zahlen, die sich 
ja z.B. erreichen läßt mit
sprintf(irgendwas,"%04d",Zahl);
Ist die Zahl z.B. 123 gibt irgendwas 0123 aus. Leider funktioniert das 
Ganze nur bis 0 mit der Ausgabe 0000. Sobald die Zahl kleiner als 0 wird 
stimmt die Ausgabe zwar noch, aber die führenden Nullen fehlen es kommt 
also nur -4 statt -0004.
Läßt sich das beheben?
2. Besteht die Möglichkeit, die Ausgabe so zu formatieren, das auch das 
Vorzeichen immer mit ausgegeben wird, also +0123 ?

von Stefan (Gast)


Lesenswert?

if (zahl < 0)
  sprintf(irgendwas, "-%04d", (0-Zahl));
else
  sprintf(irgendwas, "+%04d", Zahl);

von Karl H. (kbuchegg)


Lesenswert?

flyingwolf wrote:
> Einen guten Morgen allen Forenusern,
> mich beschäftigt ein Frage zur Formatierten Ausgabe von Zahlen, die sich
> ja z.B. erreichen läßt mit
> sprintf(irgendwas,"%04d",Zahl);
> Ist die Zahl z.B. 123 gibt irgendwas 0123 aus. Leider funktioniert das
> Ganze nur bis 0 mit der Ausgabe 0000. Sobald die Zahl kleiner als 0 wird
> stimmt die Ausgabe zwar noch, aber die führenden Nullen fehlen es kommt
> also nur -4 statt -0004.

Dann hat deine printf() einen Bug.

> Läßt sich das beheben?
> 2. Besteht die Möglichkeit, die Ausgabe so zu formatieren, das auch das
> Vorzeichen immer mit ausgegeben wird, also +0123 ?

Das Formatierzeichen + macht das.

sprintf( irgendwas, "%+04d", Zahl );

Nach sowas kann man aber auch ausgezeichnet googlen :-)


von flyingwolf (Gast)


Lesenswert?

@ Stefan
Diese Idee ist allerdings verblüffend frech.
Erst mal ganz herzlichen Dank.
Ist das tatsächlich der reguläre Weg um dieses Problem zu lösen?

von Oliver (Gast)


Lesenswert?

>Ist das tatsächlich der reguläre Weg um dieses Problem zu lösen?

Nein. Wie Karl heinz schon schrieb, ist dein sprintf kaputt. Normales 
sprintf funktioniert selbstverständlich auch mit negativen Zahlen.

Oliver

von Günter R. (galileo14)


Lesenswert?

Allerdings müßte mit

 sprintf(irgendwas,"%04d",Zahl);

und Zahl = -4  die Darstellung "-004" herauskommen, nicht "-0004", denn 
das Feld ist ja insgesamt nur 4 Stellen lang, inkl. Vorzeichen.

Stefan's Workaround fügt die Vorzeichen der Feldlänge hinzu, sodaß dort 
dann "-0004" stehen würde.



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
Noch kein Account? Hier anmelden.