localeconv ()- 从环境检索信息
格式
#include <locale.h>
struct lconv *localeconv(void);语言级别
ANSI
线程安全
是
语言环境敏感
此函数的行为可能受当前语言环境的 LC_NUMERIC 和LC_货币类别的影响。 有关更多信息,请参阅 了解 CCSID 和语言环境。
描述
localeconv() 将类型为 struct lconv 的结构的组件设置为适合于当前语言环境的值。 结构可能被另一个对 localeconv()的调用或通过调用 setlocale() 函数覆盖。
该结构包含以下元素 (显示的缺省值用于 C 语言环境):
| 元素 | 元素的用途 | 缺省值 |
|---|---|---|
| char * decimal_point | 用于格式化非货币数量的小数点字符。 | "." |
| 字符 * 千和塞普 | 用于以格式化的非货币量分隔小数点字符左侧的数字组的字符。 | "" |
| char * 分组 | 以格式化的非货币数量表示每组数字的大小的字符串。 字符串中的每个字符指定组中的位数。 初始字符表示紧靠十进制定界符左边的组大小。 此后面的字符定义上一个组左侧的后续组。 如果最后一个字符不是 UCHAR_MAX ,那么将使用最后一个字符作为大小来重复分组。 如果最后一个字符是 UCHAR_MAX ,那么仅对字符串中已存在的组执行分组 (不重复)。 请参阅 表 1 ,以获取有关分组工作方式的示例。 | "" |
| char * int_curr_symbol | 当前语言环境的国际货币符号。 前三个字符包含字母国际货币符号。 第四个字符 (通常是空格) 是用于将国际货币符号与货币数量分开的字符。 | "" |
| char * currency_symbol | 当前语言环境的本地货币符号。 | "" |
| char * mon_decimal_point | 用于格式化货币数量的小数点字符。 | "" |
| char * mon_千和 sep | 格式化货币数量中数字的分隔符。 | "" |
| 字符 * mon_分组 | 以格式化货币数量表示每组数字的大小的字符串。 字符串中的每个字符指定组中的位数。 初始字符表示紧靠十进制定界符左边的组大小。 以下字符定义上一个组左侧的后续组。 如果最后一个字符不是 UCHAR_MAX ,那么将使用最后一个字符作为大小来重复分组。 如果最后一个字符是 UCHAR_MAX ,那么仅对字符串中已存在的组执行分组 (不重复)。 请参阅 表 1 ,以获取有关分组工作方式的示例。 | "" |
| char * positive_sign | 指示货币数量中使用的正号的字符串。 | "" |
| char * Negtive_sign | 指示货币数量中使用的负号的字符串。 | "" |
| char int_小数位数 | 对于国际格式的货币数量,小数点右边显示的位数。 | UCHAR_MAX |
| 字符小数位数 | 以货币数量表示的小数点右边的位数。 | UCHAR_MAX |
| char p_cs_先例 | 1 (如果 currency_symbol 在非负格式货币数量的值之前); 0 (如果没有)。 | UCHAR_MAX |
| 字符型 p_sep_by_space | 1 如果 currency_symbol 与非负格式货币数量的值用空格分隔; 0 (如果没有)。 | UCHAR_MAX |
| char n_cs_先例 | 1 (如果 currency_symbol 在负格式货币数量的值之前); 0 (如果没有)。 | UCHAR_MAX |
| 字符 n_sep_by_space | 1 (如果 currency_symbol 由空格与负格式货币数量的值分隔); 0 (如果没有)。 | UCHAR_MAX |
| char p_sign_posn | 指示非负格式货币数量的 positive_sign 的位置的值。 | UCHAR_MAX |
| 字符 n_sign_posn | 用于指示负格式货币数量的 否定符号 的位置的值。 | UCHAR_MAX |
指向值为 "" 的字符串的指针指示该值在 C 语言环境中不可用或长度为零。 值为 UCHAR_MAX 的 char 类型的元素指示该值在当前语言环境中不可用。
n_sign_posn 和 p_sign_posn 元素可以具有以下值:
- 值
- 含义
- 重大安全事件数量
- 数量和 currency_symbol 括在括号中。
- 第 1 年
- 符号在数量和 currency_symbol之前。
- 2
- 符号跟在数量和 currency_symbol之后。
- 3
- 符号位于 currency_symbol之前。
- 4
- 符号跟在 currency_symbol后面。
| 语言环境源 | 分组字符串 | 编号 | 格式化数字 |
|---|---|---|---|
| -1 | 0x00 | 123456789 | 123456789 |
| 3 | 0x0300 | 123456789 | 123,456,789 |
| 3;-1 | 0x03FF00 | 123456789 | 123456,789 |
| 3;2;1 | 0x03020100 | 123456789 | 1,2,3,4,56,789 |
| Country | 正格式 | 负格式 | 国际格式 |
|---|---|---|---|
| 意大利 | L.1.230 | -L.1.230 | ITL.1.230 |
| 荷兰 | 1.234和 56 | F -1.234和 56 | NLG 1.234, 56 |
| 挪威 | kr1.234,56 | kr1.234,56- | NOK1.234,56 |
| 瑞士 | SFRs.1,234.56 | SFrx.1,234.56C | CHF 1 ,234.56 |
上表是由具有以下货币字段的语言环境生成的:
| 意大利 | 荷兰 | 挪威 | 瑞士 | |
|---|---|---|---|---|
| int_curr_symbol | "国际交易日志"。 | "北草坪小组" | "挪威克朗" | "瑞士法郎" |
| 货币符号 | "L." | "F" | "KR" | "Sfrs" |
| 单十进制点 | "" | "," | "," | "." |
| mon_mands_sep | "." | "." | "." | "," |
| Mon_分组 | "\3" | "\3" | "\3" | "\3" |
| 实数符号 | "" | "" | "" | "" |
| 负号 | "-" | "-" | "-" | "C" |
| int_小数 | 0 | 2 | 2 | 2 |
| 小数位数 | 0 | 2 | 2 | 2 |
| p_cs_先例 | 1 | 1 | 1 | 1 |
| p_sep_by_space | 0 | 1 | 0 | 0 |
| n_cs_preceds | 1 | 1 | 1 | 1 |
| n_sep_by_space | 0 | 1 | 0 | 0 |
| p_sep_posn | 1 | 1 | 1 | 1 |
| n_sign_posn | 1 | 4 | 2 | 2 |
返回值
localeconv() 函数返回指向结构的指针。
使用 *CLD 语言环境对象的示例
此示例显示语言环境的缺省小数点,然后显示 LC_C_FRANCE 语言环境的小数点。
#include <stdio.h>
#include <locale.h>
int main(void) {
char * string;
struct lconv * mylocale;
mylocale = localeconv();
/* Display default decimal point */
printf("Default decimal point is a %s\n", mylocale->decimal_point);
if (NULL != (string = setlocale(LC_ALL, LC_C_FRANCE))) {
mylocale = localeconv();
/* A comma is set to be the decimal point when the locale is LC_C_FRANCE*/
printf("France's decimal point is a %s\n", mylocale->decimal_point);
} else {
printf("setlocale(LC_ALL, LC_C_FRANCE) returned <NULL>\n");
}
return 0;
}
使用 *LOCALE 对象的示例
/************************************************************************
This example prints out the default decimal point for
the C locale and then the decimal point for the French
locale using a *LOCALE object called
"/QSYS.LIB/MYLIB.LIB/LC_FRANCE.LOCALE".
Step 1: Create a French *LOCALE object by entering the command
CRTLOCALE LOCALE('/QSYS.LIB/MYLIB.LIB/LC_FRANCE.LOCALE') +
SRCFILE('/QSYS.LIB/QSYSLOCALE.LIB/QLOCALESRC.FILE/ +
FR_FR.MBR') CCSID(297) *
Step 2: Compile the following C source, specifying
LOCALETYPE(*LOCALE) on the compilation command.
Step 3: Run the program.
************************************************************************/
#include <stdio.h>
#include <locale.h>
int main(void) {
char * string;
struct lconv * mylocale;
mylocale = localeconv();
/* Display default decimal point */
printf("Default decimal point is a %s\n", mylocale->decimal_point);
if (NULL != (string = setlocale(LC_ALL,
"/QSYS.LIB/MYLIB.LIB/LC_FRANCE.LOCALE"))) {
mylocale = localeconv();
/* A comma is set to be the decimal point in the French locale */
printf("France's decimal point is a %s\n", mylocale->decimal_point);
} else {
printf("setlocale(LC_ALL, \"/QSYS.LIB/MYLIB.LIB/LC_FRANCE.LOCALE\") \
returned <NULL>\n");
}
return 0;
}