STRFMON
Section: Manuel du programmeur Linux (3) Updated: 21 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
EXEMPLE
VOIR AUSSI
TRADUCTION
NOM
strfmon - Convertir des valeurs monétaires en chaînes de caractères.
SYNOPSIS
#include <monetary.h>
ssize_t strfmon(char *s, size_t max, const char *format,
...);
DESCRIPTION
La fonction strfmon() met en forme les valeurs transmises, en
fonction des spécification de la chaîne de format et place le résultat
dans la chaîne de caractère s de taille max.
Les caractères ordinaires de format sont copié 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 drapeau parmi
les suivants :
- =f
-
Le caractère unique
f
sert comme caractère numérique de remplissage (à utiliser avec une précision
à gauche, voir plus bas).
Sans indication, il s'agit du caractère espace.
- ^
-
Ne pas utiliser les caractères de regroupement (par milliers par exemple) qui
peuvent être définis pour la localisation en cours. Par défaut, le groupement est actif.
- ( or +
-
L'attribut ( indique que les valeurs négatives doivent être encadrées entre parenthèses.
L'attribut + indique que le signe doit être traité de la manière par défaut, c'est à dire
les valeurs précédées de l'indication locale de signe. Par exemple rien pour les valeurs
positives et "-" pour les négatives.
- !
-
Omettre le signe monétaire.
- -
-
Justifier tous les champs à gauche. Par défaut la justification est à droite.
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 :
- %
-
(Dans ce cas, la spécification entière doit être exactement "%%").
Placer un caractère `%' dans la chaîne de résultat.
- i
-
Un argument de type double est converti en utilisant les formats internationaux
des monnaies dans la localisation en cours.
- n
-
Un argument de type double est converti en utilisant les formats nationaux
des monnaies dans la localisation en cours.
VALEUR RENVOYÉE
La fonction strfmon() renvoie le nombre de caractères placés dans la
chaine s, sans compter le caractère NUL final, à condition
que tout tienne dans le buffer fourni.
Sinon, il rempli
errno
avec la valeur E2BIG et renvoie -1. Le contenu de la chaîne est indéfini dans ce cas.
EXEMPLE
L'appel
-
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.
Etonnament, 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 ]
VOIR AUSSI
TRADUCTION
Christophe Blaess, 2001-2003..
|