Provided by: manpages-es_1.55-10_all bug

NOMBRE

       strfmon - convierte valores monetarios a una cadena

SINOPSIS

       #include <monetary.h>

       ssize_t strfmon(char *s, size_t max, const char *format,
       ...);

DESCRIPCIÓN

       La  función  strfmon()  formatea  las  cantidades especificadas según la especificación de
       formato format y guarda el resultado en el array de caracteres s de tamaño max.

       Los caracteres ordinarios en format se copian a s sin conversión. Los  especificadores  de
       conversión comienzan con un carácter `%'. Inmediatamente después puede haber cero o más de
       las siguientes opciones:

       =f     El carácter de un sólo byte f se usa como carácter de relleno numérico (el  relleno
              se  produce a la izquierda, vea más abajo).  Cuando no se especifica, se utiliza el
              carácter espacio.

       ^      No  usar  ningún  carácter  de  agrupamiento  que  pueda  estar  definido  para  la
              localización actual. Por defecto, el agrupamiento está habilitado.

       ( o +  La  opción  (  indica  que  las  cantidades  negativas  deben  ser encerradas entre
              paréntesis. La opción + indica que los signos deben ser manejados en  el  modo  por
              defecto,  esto  es,  las cantidades son precedidas por la indicación de signo de la
              localización, p.e., nada para positivo, "-" para negativo.

       !      Omitir el símbolo monetario.

       -      Justificar a la izquierda todos los campos. Por defecto se justifican a la derecha.

       A continuación, puede haber  una  anchura  de  campo:  una  cadena  de  dígitos  decimales
       especificando  una  anchura  mínima de campo. El valor por defecto es 0.  Un resultado más
       pequeño que esta anchura es rellenado con  espacios  (a  la  izquierda,  a  menos  que  se
       especifique la opción de justificado a la izquierda).

       Seguidamente,  pueda  haber una precisión izquierda de la forma "#" seguido por una cadena
       de dígitos decimales. Si el número de dígitos a la izquierda del carácter decimal  es  más
       pequeño  que  esto, la representación se rellena a la izquierda con el carácter de relleno
       numérico. Los caracteres de agrupamiento no se tienen en cuenta en este ancho de campo.

       Tras esto, puede haber una precisión derecha de la forma "." seguido  por  una  cadena  de
       dígitos  decimales.  La cantidad a formatear se redondea al número especificado de dígitos
       antes de formatear.  El valor por omisión se especifica en  los  elementos  frac_digits  y
       int_frac_digits  de  la  localización actual.  Si la precisión derecha es 0, no se muestra
       ningún carácter decimal (el carácter decimal lo determina aquí LC_MONETARY y puede diferir
       del especificado por LC_NUMERIC.)

       Finalmente,  la  especificación de conversión debe terminar con un carácter de conversión.
       Los tres carácteres de conversión son

       %      (En este caso la especificación completa  debe  ser  exactamente  "%%".)   Pone  un
              carácter `%' en la cadena resultado.

       i      Un  argumento  de tipo doble se convierte usando el formato monetario internacional
              de la localización.

       n      Un argumento de tipo doble se convierte usando el formato monetario nacional de  la
              localización.

VALOR DEVUELTO

       La función strfmon() devuelve el número de caracteres puestos en el array s sin incluir el
       carácter 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 localización alemana (con fl para "florijnen" y NLG para Netherlands Guilders).   El
       carácter  de  grupo es muy molesto porque ocupa mucho espacio como dígito, mientras que no
       debería ocupar más de la mitad y provocará sin duda confusión.  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  localización.  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ÉASE TAMBIÉN

       setlocale(3), sprintf(3), locale(7)