localeconv()

Updated: April 19, 2023

Set numeric formatting according to the current locale

Synopsis:

#include <locale.h>

struct lconv * localeconv( void );

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The localeconv() function gets the values appropriate for formatting numeric quantities using the current locale. It returns a pointer to a struct lconv with the following members:

char * decimal_point
The decimal-point character used for nonmonetary quantities.
char * thousands_sep
The character used to separate groups of digits on the left of the decimal-point character formatted nonmonetary quantities.
char * int_curr_symbol
The international currency symbol for the current locale. The first three characters contain the alphabetic international currency symbol in accordance with those specified in ISO 4217: Codes for the Representation of Currency and Funds. The fourth character (immediately preceding the NUL character) is the character used to separate the international currency symbol from the monetary quantity.
char * currency_symbol
The local currency symbol applicable to the current locale.
char * mon_decimal_point
The decimal-point character used to format monetary quantities.
char * mon_thousands_sep
The character used to separate groups of digits on the left of the decimal-point character in formatted monetary quantities.
char * mon_grouping
A string whose elements indicate the size of each group of digits in formatted monetary quantities.
char * grouping
A string whose elements indicate the size of each group of digits in formatted nonmonetary quantities.
char * positive_sign
The string used to indicate a nonnegative monetary quantity.
char * negative_sign
The string used to indicate a negative monetary quantity.
char int_frac_digits
The number of fractional digits (to the right of the decimal point) to display in an internationally formatted monetary quantity.
char frac_digits
The number of fractional digits (to the right of the decimal point) to display in a formatted monetary quantity.
char p_cs_precedes
Set to 1 or 0 if the currency_symbol precedes or follows the value for a nonnegative monetary quantity.
char p_sep_by_space
Set to 1 or 0 if the currency_symbol is or isn't separated by a space from the value for a nonnegative monetary quantity.
char n_cs_precedes
Set to 1 or 0 if the currency_symbol precedes or follows the value for a negative monetary quantity.
char n_sep_by_space
Set to 1 or 0 if the currency_symbol is or isn't separated by a space from the value for a negative monetary quantity.
char p_sign_posn
The position of the positive_sign for a nonnegative monetary quantity.
char n_sign_posn
The position of the positive_sign for a negative monetary quantity.

The grouping and mon_grouping members have the following values:

CHAR_MAX
Perform no further grouping.
0
Repeat the previous element used for the remainder of the digits.
other
The value is the number of digits that comprise the current group. Examine the next element to determine the size of the next group of digits (to the left of the current group).

The p_sign_posn and n_sign_posn members have the following values:

0
Parentheses surround the quantity and currency_symbol.
1
The sign string precedes the quantity and currency_symbol.
2
The sign string follows the quantity and currency_symbol.
3
The sign string immediately precedes the quantity and currency_symbol.
4
The sign string immediately follows the quantity and currency_symbol.
Note: QNX Neutrino provides this function for POSIX compatibility, but it isn't adequate for internationalization. QNX Neutrino ships the International Components for Unicode (ICU) libraries (libicu*) that you can use instead. For more information about ICU, see https://icu.unicode.org/home.

Returns:

A pointer to the struct lconv.

Examples:

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

int main( void ) 
{
    struct lconv *lc;

    lc = localeconv();

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

    return EXIT_SUCCESS;
}

Classification:

ANSI, POSIX 1003.1

Safety:  
Cancellation point No
Interrupt handler No
Signal handler No
Thread Yes