Forum: PC-Programmierung Printf: Platz für "-"-Zeichen und führende Nullen


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich stehe gerade mit dem Printf-Format-String unter C wieder auf dem 
Schlauch. Ich will drei führende Nullen vor dem Komma und zwei 
nachfolgende Stellen nach dem Komma - als dass immer fünf Stellen 
sichtbar sind.

Das Vorzeichen soll zusätzlich vor der ersten Null erscheinen. Ob beim 
nicht-Vorzeichen ein Leerzeichen oder nichts entsteht, ist mir egal.

Bei printf(" %06.2f", -1.f); klaut das Minuszeichen die erste Null. Bei 
printf(" %-06.2f", -1.f); werden die führenden Nullen ignoriert.

Gibt es da einen Trick, oder muss ich mir meinen String aus 
Ziffern+Vorzeichen selbst zusammenbauen?

von Thorsten S. (thosch)


Lesenswert?

Nimm doch "%07.2f" als Formatstring und mach ein sprintf in einen 
String.
Dann prüfst du das erste Zeichen vom String auf '0' und ersetzt es in 
diesem Falle durch ein Leerzeichen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Walter T. schrieb:
> Das Vorzeichen soll zusätzlich vor der ersten Null erscheinen. Ob beim
> nicht-Vorzeichen ein Leerzeichen oder nichts entsteht, ist mir egal.

Darf für positive Zahlen auch ein '+' vorangestellt werden? Dann wäre
"%+07.2f" das geeignete Format.

Edit: "% 07.2f" scheint genau das zu tun, was du erwartest. Muss es aber
erst ausprobieren.

Edit2: Ja, "% 07.2f" tut und ist ISO-konform.

: Bearbeitet durch Moderator
von Walter T. (nicolas)


Lesenswert?

Yalu X. schrieb:
> Darf für positive Zahlen auch ein '+' vorangestellt werden?

Nein, das Minus-Zeichen ist ja so wichtig, dass es aus genau diesem 
Grund nicht optisch untergehen darf.

Yalu X. schrieb:
> Edit2: Ja, "% 07.2f" tut und ist ISO-konform.

Super, vielen Dank! Das sieht jetzt deutlich schöner aus als mit dem 
Workaround aus getrenntem Vorzeichen + Wert.

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.