Provided by:
manpages-es_1.55-10_all 
NOMBRE
strfmon - convierte valores monetarios a una cadena
SINOPSIS
#include <monetary.h>
ssize_t strfmon(char *s, size_t max, const char *format,
...);
DESCRIPCI'ON
La funcion strfmon() formatea las cantidades especificadas segun la
especificacion de formato format y guarda el resultado en el array de
caracteres s de tamano max.
Los caracteres ordinarios en format se copian a s sin conversion. Los
especificadores de conversion comienzan con un caracter `%'.
Inmediatamente despues puede haber cero o mas de las siguientes
opciones:
=f El caracter de un solo byte f se usa como caracter de relleno
numerico (el relleno se produce a la izquierda, vea mas abajo).
Cuando no se especifica, se utiliza el caracter espacio.
^ No usar ningun caracter de agrupamiento que pueda estar definido
para la localizacion actual. Por defecto, el agrupamiento esta
habilitado.
( o + La opcion ( indica que las cantidades negativas deben ser
encerradas entre parentesis. La opcion + indica que los signos
deben ser manejados en el modo por defecto, esto es, las
cantidades son precedidas por la indicacion de signo de la
localizacion, p.e., nada para positivo, "-" para negativo.
! Omitir el simbolo monetario.
- Justificar a la izquierda todos los campos. Por defecto se
justifican a la derecha.
A continuacion, puede haber una anchura de campo: una cadena de digitos
decimales especificando una anchura minima de campo. El valor por
defecto es 0. Un resultado mas pequeno que esta anchura es rellenado
con espacios (a la izquierda, a menos que se especifique la opcion de
justificado a la izquierda).
Seguidamente, pueda haber una precision izquierda de la forma "#"
seguido por una cadena de digitos decimales. Si el numero de digitos a
la izquierda del caracter decimal es mas pequeno que esto, la
representacion se rellena a la izquierda con el caracter de relleno
numerico. Los caracteres de agrupamiento no se tienen en cuenta en este
ancho de campo.
Tras esto, puede haber una precision derecha de la forma "." seguido
por una cadena de digitos decimales. La cantidad a formatear se
redondea al numero especificado de digitos antes de formatear. El
valor por omision se especifica en los elementos frac_digits y
int_frac_digits de la localizacion actual. Si la precision derecha es
0, no se muestra ningun caracter decimal (el caracter decimal lo
determina aqui LC_MONETARY y puede diferir del especificado por
LC_NUMERIC.)
Finalmente, la especificacion de conversion debe terminar con un
caracter de conversion. Los tres caracteres de conversion son
% (En este caso la especificacion completa debe ser exactamente
"%%".) Pone un caracter `%' en la cadena resultado.
i Un argumento de tipo doble se convierte usando el formato
monetario internacional de la localizacion.
n Un argumento de tipo doble se convierte usando el formato
monetario nacional de la localizacion.
VALOR DEVUELTO
La funcion strfmon() devuelve el numero de caracteres puestos en el
array s sin incluir el caracter NUL del final, siempre que la cadena,
incluendo el NUL del final, quepa. En otro caso, asigna a errno el
valor E2BIG, devuelve -1 y el contenido del array queda indefinido.
EJEMPLO
La llamada
strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]",
1234.567, 1234.567);
produce la salida
[ fl **1234,57] [ NLG **1 234,57]
en la localizacion alemana (con fl para "florijnen" y NLG para
Netherlands Guilders). El caracter de grupo es muy molesto porque
ocupa mucho espacio como digito, mientras que no deberia ocupar mas de
la mitad y provocara sin duda confusion. Sorprendentemente, "fl" es
precedido y seguido por un espacio, y "NLG" es precedido por uno y
seguido por dos espacios. Esto puede ser un fallo en los ficheros de
localizacion. Las localizaciones italiana, australiana, suiza y
portuguesa producen los resultados
[ L. **1235] [ ITL **1.235]
[ $**1234.57] [ AUD **1,234.57]
[Fr. **1234,57] [CHF **1.234,57]
[ **1234$57Esc] [ **1.234$57PTE ]
V'EASE TAMBI'EN
setlocale(3), sprintf(3), locale(7)