Provided by: manpages-es_1.55-4_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 ‘%’. Inmediata‐
        mente 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 encer‐
               radas 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 jus‐
               tifican 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  repre‐
        sentació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 deter‐
        mina 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  mone‐
               tario internacional de la localización.
 
        n      Un  argumento de tipo doble se convierte usando el formato mone‐
               tario nacional de la localización.
        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 Nether‐
        lands 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  pre‐
        cedido 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  local‐
        izació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 ]
        setlocale(3), sprintf(3), locale(7)