当前位置: C语言 -- 标准库 -- <locale.h> -- struct lconv

struct lconv类型


描述:

该类型是结构类型,包含与数值格式有关的结构成员。结构成员可分为char *类型结构成员和char类型结构成员。char *类型结构成员都是指向字符串的指针,除decimal_point外,都可以指向"",表示该值在当前语言环境中不可用或者长度为0。除groupingmon_grouping外,字符串应以初始移位状态开始和结束。char类型结构成员是非负数;如果是CHAR_MAX,表示该值在当前语言环境中不可用。


struct lconv类型至少包含以下结构成员(结构成员的顺序ISO/IEC 9899:2018标准未作明确要求。)。"C"语言环境中,结构成员具有下表中的值。

结构成员 "C"环境值 描述
char *decimal_point "." 用于格式化非货币数值的小数点字符。
char *thousands_sep "" 格式化的非货币数值中用于分隔小数点前数字组的字符。
char *grouping "" 一个字符串,其元素表示格式化非货币数值中的每组数的位数。第一个元素表示最右侧一组数的位数;第二个元素表示次右侧一组数的位数;以此类推。如果元素值为0,则反复使用前面的元素对剩下的位进行分组。如果元素值为CHAR_MAX,则表示不再分组。假设thousands_sep指向" ",以数12345678为例,不同grouping对应的数值表示方式如下所示:

grouping        数值表示形式

  "\3"           12 345 678

  "\2\3"         123 456 78

char *mon_decimal_point "" 用于格式化货币数值的小数点字符。
char *mon_thousands_sep "" 格式化的货币数值中用于分隔小数点前数字组的字符。
char *mon_grouping "" 一个字符串,其元素表示格式化货币数值中的每组数的位数。第一个元素表示最右侧一组数的位数;第二个元素表示次右侧一组数的位数;以此类推。如果元素值为0,则反复使用前面的元素对剩下的位进行分组。如果元素值为CHAR_MAX,则表示不再分组。假设mon_thousands_sep指向" ",以数12345678为例,不同mon_grouping对应的数值表示方式如下所示:

mon_grouping        数值表示形式

  "\3"               12 345 678

  "\2\3"             123 456 78

char *positive_sign "" 用于表示非负格式化货币值的字符串。
char *negative_sign "" 用于表示负格式化货币值的字符串。
char *currency_symbol "" 当前语言环境的本地货币符号,例如:¥£$等。
char  frac_digits CHAR_MAX 以本地格式化的货币量显示的小数位数(小数点后的小数位数)。
char  p_cs_precedes CHAR_MAX 表示本地货币符号(currency_symbol)和非负本地格式化货币值的先后顺序,值可能是1或者0。如果值为1,货币符号在货币值之前,例如:¥100;如果值为0,货币符号在货币值之后,例如:100¥
char  n_cs_precedes CHAR_MAX 表示本地货币符号(currency_symbol)和负本地格式化货币值的先后顺序,值可能是1或者0。如果值为1,货币符号在货币值之前,例如:¥-100;如果值为0,货币符号在货币值之后,例如:-100¥
char  p_sep_by_space CHAR_MAX 表示本地货币符号(currency_symbol)、非负符号和货币值的分隔方式,值可能为01或者2。如果值为0,表示不使用空格分隔货币符号和货币值,例如:¥100;如果值为1,在货币符号和非负符号相邻的情况下,使用空格将它们与货币值分隔,例如:¥+ 100;否则使用空格将货币符号和货币值分隔,例如:¥ 100;如果值为2,在货币符号和非负符号相邻的情况下,使用空格将其分隔,例如:¥ +100;否则使用空格将非负符号和货币值分隔,例如:+ 100¥
char  n_sep_by_space CHAR_MAX 表示本地货币符号(currency_symbol)、负号和货币值的分隔方式,值可能为01或者2。如果值为0,表示不使用空格分隔货币符号和货币值,例如:-100¥;如果值为1,在货币符号和负号相邻的情况下,使用空格将它们与货币值分隔,例如:¥- 100;否则使用空格将货币符号和货币值分隔,例如:-100 ¥;如果值为2,在货币符号和负号相邻的情况下,使用空格将其分隔,例如:¥ -100;否则使用空格将负号和货币值分隔,例如:- 100¥
char  p_sign_posn CHAR_MAX 表示非负货币值的符号(positive_sign)位置,值可能为0123或者4。如果值为0,货币值和货币符号均放在括号中;如果值为1,非负符号在货币值和货币符号之前;如果值为2,非负符号在货币值和货币符号之后;如果值为3,货币符号紧接着非负符号之后;如果值为4,非负符号紧接着货币符号之后。
char  n_sign_posn CHAR_MAX 表示负货币值的负号(negative_sign)位置,值可能为0123或者4。如果值为0,货币值和货币符号均放在括号中;如果值为1,负号在货币值和货币符号之前;如果值为2,负号在货币值和货币符号之后;如果值为3,货币符号紧接着负号之后;如果值为4,负号紧接着货币符号之后。
char *int_curr_symbol "" 当前语言环境的国际货币符号。前三个字符包含符合ISO 4217标准规定的国际货币符号;第4个字符(即空字符前的那个字符,通常是空格符。)用于分隔国际货币符号和货币值,例如:"CNY ""USD ""GBP ""EUR "
char  int_frac_digits CHAR_MAX 以国际格式化的货币量显示的小数位数(小数点后的小数位数)。
char  int_p_cs_precedes CHAR_MAX 表示当前语言环境的国际货币符号(int_curr_symbol)和非负国际格式化货币值的先后顺序,值可能是1或者0。如果值为1,货币符号在货币值之前,例如:CNY100;如果值为0,货币符号在货币值之后,例如:100CNY
char  int_n_cs_precedes CHAR_MAX 表示当前语言环境的国际货币符号(int_curr_symbol)和负国际格式化货币值的先后顺序,值可能是1或者0。如果值为1,货币符号在货币值之前,例如:CNY-100;如果值为0,货币符号在货币值之后,例如:-100CNY
char  int_p_sep_by_space CHAR_MAX 表示当前语言环境的国际货币符号(int_curr_symbol)、非负符号和货币值的分隔方式,值可能为01或者2。如果值为0,表示不使用空格分隔货币符号和货币值,例如:CNY100;如果值为1,在货币符号和非负符号相邻的情况下,使用空格将它们与货币值分隔,例如:CNY+ 100;否则使用空格将货币符号和货币值分隔,例如:CNY 100;如果值为2,在货币符号和非负符号相邻的情况下,使用空格将其分隔,例如:CNY +100;否则使用空格将非负符号和货币值分隔,例如:+ 100CNY
char  int_n_sep_by_space CHAR_MAX 表示当前语言环境的国际货币符号(int_curr_symbol)、负号和货币值的分隔方式,值可能为01或者2。如果值为0,表示不使用空格分隔货币符号和货币值,例如:-100CNY;如果值为1,在货币符号和负号相邻的情况下,使用空格将它们与货币值分隔,例如:CNY- 100;否则使用空格将货币符号和货币值分隔,例如:-100 CNY;如果值为2,在货币符号和负号相邻的情况下,使用空格将其分隔,例如:CNY -100;否则使用空格将负号和货币值分隔,例如:- 100CNY
char  int_p_sign_posn CHAR_MAX 表示非负国际格式化货币值的符号(positive_sign)位置,值可能为0123或者4。如果值为0,货币值和货币符号均放在括号中;如果值为1,非负符号在货币值和货币符号之前;如果值为2,非负符号在货币值和货币符号之后;如果值为3,货币符号紧接着非负符号之后;如果值为4,非负符号紧接着货币符号之后。
char  int_n_sign_posn CHAR_MAX 表示负国际格式化货币值的符号(negative_sign)位置,值可能为0123或者4。如果值为0,货币值和货币符号均放在括号中;如果值为1,负号在货币值和货币符号之前;如果值为2,负号在货币值和货币符号之后;如果值为3,货币符号紧接着负号之后;如果值为4,负号紧接着货币符号之后。

范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
/*类型struct lconv范例*/

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

void lconvMember(const char *str)
{
    struct lconv *lc;

    setlocale(LC_ALL, str);
    lc = localeconv();

    printf("decimal_point: %s\n", lc->decimal_point);
    printf("thousands_sep: %s\n", lc->thousands_sep);
    printf("mon_decimal_point: %s\n", lc->mon_decimal_point);
    printf("mon_thousands_sep: %s\n", lc->mon_thousands_sep);
    printf("currency_symbol: %s\n", lc->currency_symbol);
    printf("int_curr_symbol: %s\n", lc->int_curr_symbol);
}

int main(void)
{
    const char *str = "en-US";

    lconvMember(str);

    return 0;
}


输出:

decimal_point: .

thousands_sep: ,

mon_decimal_point: .

mon_thousands_sep: ,

currency_symbol: $

int_curr_symbol: USD

注:使用Visual Studio编译。


相关内容:
setlocale 改变或者查询语言环境的函数。
localeconv 返回struct lconv类型指针的函数。