J'ai un nombre à virgule flottante tel que 4917.24
. Je voudrais l'imprimer pour avoir toujours cinq caractères avant la virgule décimale, 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 affiche *****
. Le spécificateur de format est-il correct?
Votre spécificateur de format est incorrect. À partir de la page de manuel printf()
sur ma machine:
0
Un caractère zéro '0
' indiquant que le remplissage nul doit être utilisé plutôt que le remplissage vide. Un '-
' remplace un '0
' si les deux sont utilisés;Largeur de champ: 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 complétée par un blanc à gauche (ou à droite, si l'indicateur de réglage à gauche a été donné) pour compenser la largeur du champ (notez qu'un zéro de tête est un indicateur, mais un zéro intégré fait partie d'une largeur de champ);
Précision: une période facultative, '
.
', suivie d'une chaîne de chiffres facultative donnant une précision qui spécifie le nombre de chiffres à apparaître après la virgule décimale, pour e et f formats, 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 traitée comme zéro;
Pour votre cas, votre format serait %09.3f
:
#include <stdio.h>
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()
qui soit conforme à la norme pour ces détails - de nombreux environnements embarqués ne le font pas avoir une telle implémentation.