web-dev-qa-db-fra.com

Zéros de tête supplémentaires lors de l'impression de float à l'aide de printf?

J'aimerais pouvoir écrire une chaîne de temps qui ressemble à ceci: 1:04:02.1 hours en utilisant printf.
Lorsque j'essaie d'écrire quelque chose comme ceci:

printf("%d:%02d:%02.1f hours\n", 1, 4, 2.123456);

Je reçois:

1:04:2.1 hours

Est-il possible d'ajouter des zéros non significatifs à une mise en forme flottante?

39
shoosh

Avec le %f spécificateur de format, le "2" est traité comme le nombre minimum de caractères au total, pas le nombre de chiffres avant le point décimal. Vous devez donc le remplacer par 4 pour obtenir deux premiers chiffres + le point décimal + un chiffre décimal.

printf("%d:%02d:%04.1f hours\n", 1, 4, 2.123456);
70
AndiDog

Essayez %04.1f au lieu de %02.1f. Le "4" signifie ici qu'au moins 4 caractères seront imprimés et le "2.1" a 3 (> 2) caractères, donc pour activer les zéros de remplissage, vous avez besoin de 4.

15
kennytm