J'essaie de trouver un bon moyen d'imprimer les 0 en tête, comme 01001 pour un code postal. Bien que le numéro soit stocké sous la forme 1001, quelle est la bonne façon de procéder?
J'ai pensé à utiliser l'une ou l'autre des déclarations de cas / if pour déterminer le nombre de chiffres, puis le convertir en un tableau de caractères avec des 0 supplémentaires pour l'impression, mais je ne peux m'empêcher de penser qu'il peut y avoir un moyen de le faire avec le syntaxe du format printf qui m'échappe.
La bonne solution consiste à stocker le code postal dans la base de données en tant que STRING. Malgré le fait qu'il puisse ressembler à un nombre, ce n'est pas le cas. C'est un code, où chaque partie a un sens.
Un nombre est une chose sur laquelle vous faites de l'arithmétique. Un code postal n'est pas ça.
la source
Vous placez un zéro avant la largeur minimale du champ:
la source
Le code postal est un champ très localisé, de nombreux pays ont des caractères dans leurs codes postaux, par exemple le Royaume-Uni et le Canada. Par conséquent, dans cet exemple, vous devez utiliser un champ chaîne / varchar pour le stocker si, à tout moment, vous expédiez ou obtenez des utilisateurs / clients / clients / etc. d'autres pays.
Cependant, dans le cas général, vous devez utiliser la réponse recommandée (
printf("%05d", number);
).la source
Si vous êtes sur une machine * NIX:
Cela affichera une page de manuel, semblable à:
Même si la question s'adresse à C, cette page peut être utile.
la source
man
commande, il le restreint à cette section particulière. Sans cela, vous obtiendrez la page de manuel de la commande shellprintf
au lieu de la fonction C.Ici, "05" dit "utilisez 5 chiffres avec des zéros non significatifs".
la source
printf permet diverses options de formatage.
ex:
la source
Vous vous épargnerez un tas de problèmes (à long terme) si vous stockez un code postal sous forme de chaîne de caractères, ce qu'il est, plutôt qu'un nombre, ce qu'il n'est pas.
la source
Plus flexible. Voici un exemple d'impression de lignes de nombres justifiés à droite avec des largeurs fixes et un espace.
La fonction et la macro sont conçues pour que les printfs soient plus lisibles.
la source
#define FMT(x) (getFmt(8,x).c_str())
(notez le paramètre x !), Par opposition à une variable (ce que fait votre code).Si vous devez stocker le code postal dans un code postal de tableau de caractères [], vous pouvez utiliser ceci:
la source