J’ai un nombre à virgule flottante tel que 4917.24
. Je voudrais l’imprimer pour toujours avoir cinq caractères avant la virgule, avec des zéros en tête, puis trois chiffres après la décimale.
J’ai essayé printf("%05.3f", n)
sur le système embarqué que j’utilise, mais il imprime *****
. Est-ce que le spécificateur de format est correct?
Votre spécificateur de format est incorrect. Depuis la page de manuel printf()
de ma machine:
0
Un caractère zéro ‘0
‘ indiquant que le remplissage à zéro doit être utilisé plutôt que le remplissage à blanc. Un ‘-
‘ remplace un ‘0
‘ si les deux sont utilisés;Field Width: une chaîne de chiffres facultative spécifiant une largeur de champ ; si la chaîne de sortie a moins de caractères que la largeur du champ, elle sera remplie en blanc à gauche (ou à droite si l’indicateur d’ajustement à gauche a été indiqué) pour compléter la largeur du champ (notez qu’un zéro est un drapeau mais un zéro incorporé fait partie d’une largeur de champ);
Précision: une période facultative
.
‘, suivi d’une chaîne de chiffres optionnelle donnant une précision qui spécifie le nombre de chiffres à afficher après la virgule, pour les formats e et f , ou le nombre maximum de caractères à imprimer à partir d’une chaîne; si la chaîne de chiffres est manquante, la précision est considérée comme zéro;
Pour votre cas, votre format serait %09.3f
:
#include int main(int argc, char **argv) { printf("%09.3f\n", 4917.24); return 0; }
Sortie:
$ make testapp cc testapp.c -o testapp $ ./testapp 04917.240
Notez que cette réponse est conditionnelle à ce que votre système embarqué ait une implémentation printf()
conforme à la norme pour ces détails – de nombreux environnements incorporés ne disposent pas d’ une telle implémentation.