ssize_t strfmon(char *s, size_t max, const char *format, ...);
Les caractères ordinaires de format sont copiés dans s sans conversion. Les indicateurs de conversion sont introduits par un caractère « % ». Immédiatement à sa suite, il peut y avoir zéro ou plusieurs drapeaux parmi les suivants :
Ensuite, peut venir un champ de largeur : un chiffre décimal indiquant la largeur minimale en octets. Par défaut, elle vaut 0. Un résultat plus petit que cette largeur est complété avec des espaces (à gauche à moins que la justification soit à gauche).
Ensuite, il peut y avoir une précision à gauche de la forme « # » suivi par une chaîne de chiffres décimaux. Si le nombre de chiffres à gauche de la virgule est inférieur à cette valeur, la représentation est complétée à gauche avec le caractère de remplissage. Les caractères de groupement ne sont pas comptés dans la largeur du champ.
Ensuite, il peut y avoir une précision à droite de la forme « . » suivi par une chaîne de chiffres décimaux. La valeur est arrondie à ce nombre de décimales avant d'être mise en forme. La valeur par défaut est précisée dans les champs frac_digits et int_frac_digits de la localisation en cours. Si la précision à droite est 0, aucun symbole décimal n'est affiché. (Le symbole décimal est déterminé par LC_MONETARY, et peut différer de celui indiqué dans LC_NUMERIC.)
Finalement, la spécification de conversion doit se terminer par un caractère de conversion. Les trois caractères disponibles sont :
strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]", 1234.567, 1234.567);affiche
[ fl **1234,57] [ NLG **1 234,57]
Dans la localisation hollandaise (fl étant « florijnen »
et NLG « Netherlands Guilders »).
Le caractère de groupement est horrible car il prend autant de place
qu'un chiffre, alors qu'il ne devrait occuper qu'un demi-espace,
ce qui peut induire en erreur.
Étonnamment, le « fl » est précédé et suivi par un espace,
et « NLG » est précédé par un espace et suivi par deux.
Il s'agit peut-être d'un bogue dans le fichier de localisation.
Les localisations italienne, australienne, suisse, et portugaise donnent
[ L. **1235] [ ITL **1.235]
[ $**1234.57] [ AUD **1,234.57]
[Fr. **1234,57] [CHF **1.234,57]
[ **1234$57Esc] [ **1.234$57PTE ]
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 7 juin 2001 et révisée le 29 décembre 2007.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 strfmon ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 29 décembre 2007