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_MAXchar 类型的元素指示该值在当前语言环境中不可用。

n_sign_posnp_sign_posn 元素可以具有以下值:
含义
重大安全事件数量
数量和 currency_symbol 括在括号中。
第 1 年
符号在数量和 currency_symbol之前。
2
符号跟在数量和 currency_symbol之后。
3
符号位于 currency_symbol之前。
4
符号跟在 currency_symbol后面。
表 1. 分组示例
语言环境源 分组字符串 编号 格式化数字
-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
表 2。 货币格式示例
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
上表是由具有以下货币字段的语言环境生成的:
表 3. 货币字段
  意大利 荷兰 挪威 瑞士
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;
 }

相关信息