Provided by: manpages-es_1.55-3_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)