Ich versuche einen guten Weg zu finden, um führende Nullen zu drucken, wie z. B. 01001 für eine Postleitzahl. Während die Nummer als 1001 gespeichert wäre, was ist ein guter Weg, dies zu tun?
Ich dachte daran, beide case-Anweisungen / if zu verwenden, um herauszufinden, wie viele Stellen die Zahl ist, und sie dann zum Drucken in ein char-Array mit zusätzlichen Nullen umzuwandeln, aber ich kann nicht anders, als zu glauben, dass es eine Möglichkeit gibt, dies mit der zu tun Syntax im printf-Format, die mir entgeht.
Die richtige Lösung besteht darin, die Postleitzahl als STRING in der Datenbank zu speichern. Trotz der Tatsache, dass es wie eine Zahl aussehen kann, ist es nicht. Es ist ein Code, in dem jeder Teil eine Bedeutung hat.
Eine Zahl ist eine Sache, mit der Sie rechnen. Eine Postleitzahl ist das nicht.
quelle
Sie setzen eine Null vor die minimale Feldbreite:
quelle
Die Postleitzahl ist ein stark lokalisiertes Feld. Viele Länder haben Zeichen in ihren Postleitzahlen, z. B. Großbritannien, Kanada. Daher sollten Sie in diesem Beispiel ein Zeichenfolgen- / Varchar-Feld verwenden, um es zu speichern, wenn Sie zu irgendeinem Zeitpunkt Benutzer / Kunden / Kunden / usw. aus anderen Ländern versenden oder abrufen würden.
Im allgemeinen Fall sollten Sie jedoch die empfohlene Antwort (
printf("%05d", number);
) verwenden.quelle
Wenn Sie sich auf einem * NIX-Computer befinden:
Daraufhin wird eine Handbuchseite angezeigt, ähnlich:
Obwohl die Frage für C ist, kann diese Seite hilfreich sein.
quelle
man
Befehl ein numerisches Argument geben , wird es auf diesen bestimmten Abschnitt eingegrenzt . Ohne diese Option erhalten Sieprintf
anstelle der C-Funktion die Manpage für den Shell-Befehl .Hier sagt "05" "benutze 5 Ziffern mit führenden Nullen".
quelle
printf ermöglicht verschiedene Formatierungsoptionen.
Ex:
quelle
Sie sparen sich eine Menge Ärger (langfristig), wenn Sie eine Postleitzahl als Zeichenfolge speichern, die es ist, und nicht als Zahl, die es nicht ist.
quelle
Flexibler. Hier ist ein Beispiel für das Drucken von Zeilen mit rechtsbündigen Zahlen mit festen Breiten und Leerzeichen.
Die Funktion und das Makro sind so konzipiert, dass die printfs besser lesbar sind.
quelle
#define FMT(x) (getFmt(8,x).c_str())
(beachten Sie das x) definieren Parameter!) , im Gegensatz zu einer Variablen (wie es Ihr Code tut).Wenn Sie die Postleitzahl in einer Postleitzahl [] eines Zeichenarrays speichern müssen, können Sie Folgendes verwenden:
quelle