lconv

来自cppreference.com
< c‎ | locale
在标头 <locale.h> 定义
struct lconv;

struct lconv 含有 C 本地环境定义的数值和货币格式化规则。此结构体的对象可由 localeconv 获得。std::lconv 的成员为 char 类型和 char* 类型的值。除了 decimal_point,每个 char* 成员都可以指向空字符(即为空 C 字符串)。char 类型成员均为非负数,而且若任一者在当前 C 本地环境中不可用,则为 CHAR_MAX

成员对象

非货币数值格式化参数

char* decimal_point
用作小数点的字符
(公开成员对象)
char* thousands_sep
用于在小数点前分隔数位组的字符
(公开成员对象)
char* grouping
字符串,其元素指示数位组的大小
(公开成员对象)

货币数值格式化参数

char* mon_decimal_point
用作小数点的字符
(公开成员对象)
char* mon_thousands_sep
用于在小数点前分隔数位组的字符
(公开成员对象)
char* mon_grouping
字符串,其元素指示数位组的大小
(公开成员对象)
char* positive_sign
用于指示非负货币量的字符串
(公开成员对象)
char* negative_sign
用于指示负货币量的字符串
(公开成员对象)

本地货币数值格式化参数

char* currency_symbol
当前 C 本地环境中用于通货的符号
(公开成员对象)
char frac_digits
货币量中小数点后显示的位数
(公开成员对象)
char p_cs_precedes
若 currency_symbol 置于非负值前则为 1,于其后则为 0
(公开成员对象)
char n_cs_precedes
若 currency_symbol 置于负值前则为 1,于其后则为 0
(公开成员对象)
char p_sep_by_space
指示 currency_symbolpositive_sign 及非负货币值的分隔
(公开成员对象)
char n_sep_by_space
指示 currency_symbolpositive_sign 及负货币值的分隔
(公开成员对象)
char p_sign_posn
指示非负货币值中 positive_sign 的位置
(公开成员对象)
char n_sign_posn
指示负货币值中 negative_sign 的位置
(公开成员对象)

国际货币数值格式化参数

char* int_curr_symbol
当前 C 本地环境中用作国际通货名的字符串
(公开成员对象)
char int_frac_digits
国际货币量中小数点后显示的位数
(公开成员对象)
char int_p_cs_precedes
(C99)
若 int_curr_symbol 置于非负值前则为 1,于其后则为 0
(公开成员对象)
char int_n_cs_precedes
(C99)
若 int_curr_symbol 置于负值前则为 1,于其后则为 0
(公开成员对象)
char int_p_sep_by_space
(C99)
指示 int_curr_symbolpositive_sign 及非负国际货币值的分隔
(公开成员对象)
char int_n_sep_by_space
(C99)
指示 int_curr_symbolpositive_sign 及负国际货币值的分隔
(公开成员对象)
char int_p_sign_posn
(C99)
指示非负国际货币值中 positive_sign 的位置
(公开成员对象)
char int_n_sign_posn
(C99)
指示负国际货币值中 positive_sign 的位置
(公开成员对象)


按照数值判读 groupingmon_grouping 所指向的 C 字符串。遇到终止 '\0' 时,假设剩下的数位重复采用最后见到的值。若遇到 CHAR_MAX,则不再将数位分组。典型的三位一组的分组是 "\003"

p_sep_by_spacen_sep_by_spaceint_p_sep_by_spaceint_n_sep_by_space 的值判读如下:

0 通货符号和值间无空格分隔
1 符号紧贴通货符号,值为空格所分隔
2 符号紧贴值,通货符号为空格所分隔

p_sign_posnn_sign_posnint_p_sign_posnint_n_sign_posn 的值判读如下:

0 以围绕值和通货符号的括号表示正负号
1 正负号在值与通货符号前
2 正负号在值与通货符号后
3 正负号在通货符号前
4 正负号在通货符号后

示例

#include <locale.h>
#include <stdio.h>
 
int main(void)
{
    setlocale(LC_ALL, "ja_JP.UTF-8");
    struct lconv *lc = localeconv();
    printf("Japanese currency symbol: %s(%s)\n", lc->currency_symbol, lc->int_curr_symbol);
}

可能的输出:

Japanese currency symbol: ¥(JPY)

引用

  • C23 标准(ISO/IEC 9899:2024):
  • 7.11/2 Localization <locale.h> (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.11/2 Localization <locale.h> (第 TBD 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.11/2 Localization <locale.h> (第 223 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.11/2 Localization <locale.h> (第 204 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 4.4 LOCALIZATION <locale.h>

参阅

查询当前本地环境的数值及货币格式化细节
(函数)