locale.h


Función localeconv ANSI C

struct lconv *localeconv(void );

La función localeconv asigna los componentes de un objeto con tipo struct lconv con valores apropiados para el formateo de cantidades numéricas (monetarias y otras) según las reglas de la localidad actual.

Los miembros de la estructura con tipo char * son punteros a cadenas, cualquiera de ellos (excepto decimal_point) puede apuntar a "", para indicar que el valor no está disponible en la localidad actual o es de longitud cero. Los miembros con tipo char no son números negativos, cualquiera de ellos puede ser CHAR_MAX para indicar que el valor no está disponible en la localidad actual. Los miembros incluyen los siguientes:

char *decimal_point
El carácter de la coma decimal usado para formatear cantidades no monetarias.
char *thousands_sep
El carácter usado para separa grupos de dígitos antes del carácter de la coma decimal en cantidades formateadas no monetarias.
char *grouping
Una cadena cuyos elementos indican el tamaño de cada grupo de dígitos en cantidades formateadas no monetarias.
char *int_curr_symbol
El símbolo internacional de la unidad monetaria aplicable a la localidad actual. Los tres primeros caracteres contienen el símbolo internacional de la unidad monetaria con acorde con aquéllos especificados en ISO 4217:1987. El cuarto carácter (inmediatamente precediendo el carácter nulo) es el carácter usado para separar el símbolo internacional de la unidad monetaria de la cantidad monetaria.
char *currency_symbol
El símbolo local de la unidad monetaria aplicable a la localidad actual.
char *mon_decimal_point
La coma decimal usada para formatear cantidades monetarias.
char *mon_thousands_sep
El separador de grupos de dígitos antes de la coma decimal en cantidades formateadas monetarias.
char *mon_grouping
Una cadena cuyos elementos indican el tamaño de cada grupo de dígitos en cantidades formateadas monetarias.
char *positive_sign
La cadena usada para indicar valores no negativos de cantidades formateadas monetarias.
char *negative_sign
La cadena usada para indicar valores negativos de cantidades formateadas monetarias.
char int_frac_digits
El número de dígitos fraccionarios (aquéllos después de la coma decimal) para ser mostrado en una cantidad internacionalmente formateada monetaria.
char frac_digits
El número de dígitos fraccionarios (aquéllos después de la coma decimal) para ser mostrado en una cantidad formateada monetaria.
char p_cs_precedes
Asignado 1 ó 0 a currency_symbol respectivamente precede o sucede el valor para una cantidad formateada monetaria no negativa.
char p_sep_by_space
Asignado 1 ó 0 a currency_symbol respectivamente está o no está separado por un espacio del valor para una cantidad formateada monetaria no negativa.
char n_cs_precedes
Asignado 1 ó 0 a currency_symbol respectivamente precede o sucede el valor para una cantidad formateada monetaria negativa.
char n_sep_by_space
Asignado 1 ó 0 a currency_symbol respectivamente está o no está separado por un espacio del valor para una cantidad formateada monetaria negativa.
char p_sign_posn
Asignado un valor indicando la posición del signo positivo (positive_sign) para una cantidad formateada monetaria no negativa.
char n_sign_posn
Asignado un valor indicando la posición del signo negativo (negative_sign) para una cantidad formateada monetaria negativa.

Los elementos de grouping y mon_grouping son interpretadossegún lo siguiente:

CHAR_MAX No se realiza más agrupaciones
0 El elemento anterior ha de ser usado repetidamente para el resto de los dígitos
otro El valor entero es el número de dígitos que forman parte del grupo actual. El elemento posterior es examinado para determinar el tamaño del siguiente grupo de dígitos antes del grupo actual.

Los valores de p_sign_posn y n_sign_posn son interpretados según los siguiente:


0 Los paréntesis rodean la cantidad y current_symbol
1 La cadena de signo precede la cantidad y current_symbol
2 La cadena de signo sucede la cantidad y current_symbol
3 La cadena de signo inmediatamente precede la cantidad y current_symbol
4 La cadena de signo inmediatamente sucede la cantidad y current_symbol

Valor de retorno:

La función localeconv retorna un puntero al objeto rellenado. La estructura apuntado por el valor retornado no será modificado por el programa, pero puede ser sobreescrito por una llamada posterior a la función.localeconv. Además, llamadas a la función setlocale con categorías LC_ALL, LC_MONETARY, o LC_NUMERIC pueden sobreescribir el contenido de la estructura.

Ejemplo:

#include <stdio.h>
#include <locale.h>
#include <string.h>

int main()
{
  struct lconv *lcPtr;
  char *s;

  printf( "Localidad: \"%s\"\n\n", setlocale( LC_ALL, "C" ) );

  lcPtr = localeconv();

  printf( "decimal_point = \"%s\"\t\t",   lcPtr->decimal_point );
  printf( "thousands_sep = \"%s\"\n",     lcPtr->thousands_sep );
  printf( "grouping = \"%s\"\t\t\t",      lcPtr->grouping );
  printf( "int_curr_symbol = \"%s\"\n",   lcPtr->int_curr_symbol );
  printf( "currency_symbol = \"%s\"\t\t", lcPtr->currency_symbol );
  printf( "mon_decimal_point = \"%s\"\n", lcPtr->mon_decimal_point );
  printf( "mon_grouping = \"%s\"\t\t",    lcPtr->mon_grouping );
  printf( "positive_sign = \"%s\"\n",     lcPtr->positive_sign );
  printf( "negative_sign = \"%s\"\n",     lcPtr->negative_sign );
  printf( "int_frac_digits = (char) %d\t",   lcPtr->int_frac_digits );
  printf( "frac_digits = (char) %d\n",       lcPtr->frac_digits );
  printf( "p_cs_precedes = (char) %d\t",     lcPtr->p_cs_precedes );
  printf( "p_sep_by_space = (char) %d\n",    lcPtr->p_sep_by_space );
  printf( "n_cs_precedes = (char) %d\t",     lcPtr->n_cs_precedes );
  printf( "n_sep_by_space = (char) %d\n",    lcPtr->n_sep_by_space );
  printf( "p_sign_posn = (char) %d\t",       lcPtr->p_sign_posn );
  printf( "n_sign_posn = (char) %d\n",       lcPtr->n_sign_posn );

  printf( "\nCambiamos algunas variables para concordar con la localidad de " );
  printf( "España:\n" );
  lcPtr->decimal_point = ",";
  lcPtr->thousands_sep = ".";
  lcPtr->grouping = "3";
  printf( "decimal_point = \"%s\"\n",     lcPtr->decimal_point );
  printf( "thousands_sep = \"%s\"\n",     lcPtr->thousands_sep );
  printf( "grouping = \"%s\"\n",          lcPtr->grouping );

  return 0;
}