printf avec des zéros non significatifs dans C

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.