localeconv() — 環境からの情報の取得

フォーマット

#include <locale.h>
struct lconv *localeconv(void);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

この関数の振る舞いは、現行ロケールの LC_NUMERIC カテゴリーおよび LC_MONETARY カテゴリーの影響を受ける可能性があります。詳細については、CCSID およびロケールの理解を参照してください。

説明

localeconv() は、型 struct lconv を持つ構造体のコンポーネントに、現行ロケールに適切な値を設定します。 構造体は、localeconv() に対する別の呼び出しによって、または setlocale() 関数を呼び出すことによって上書きされる場合があります。

構造体には、以下のエレメントが含まれます (デフォルトで表示されるのは C ロケール用です)。

エレメント エレメントの目的 デフォルト
char *decimal_point 非通貨数量をフォーマット設定するのに使用される小数点文字。 "."
char *thousands_sep フォーマット済みの非通貨数量で小数点文字の左側の 桁グループを分離するのに使用される文字。 ""
char *grouping フォーマット済みの非通貨数量で それぞれの桁グループのサイズを示すストリング。ストリングの各文字には、グループ内の桁数が指定されます。 最初の文字は、10 進数区切り文字のすぐ左方にあるグループのサイズを表します。 これに続く文字では、前のグループの左方で、後に続くグループを定義します。 最後の文字が UCHAR_MAX ではない場合、最後の文字をサイズとして使用して、グループ化が反復されます。 最後の文字が UCHAR_MAX の場合、すでにストリング内にあるグループに対してのみグループ化が行われます (反復なし)。 グループ化の処理方法については、表 1を参照してください。 ""
char *int_curr_symbol 現行ロケール用の国際通貨記号。先頭の 3 文字には、英字の国際通貨記号が含まれています。4 番目の文字 (通常はスペース) は、通貨数量から 国際通貨記号を分離するのに使用される文字です。 ""
char *currency_symbol 現行ロケールのローカル通貨記号。 ""
char *mon_decimal_point 通貨数量のフォーマット設定に使用される小数点文字。 ""
char *mon_thousands_sep フォーマット済みの通貨数量における数字の区切り文字。 ""
char *mon_grouping フォーマット済みの通貨数量で それぞれの桁グループのサイズを示すストリング。ストリングの各文字には、グループ内の桁数が指定されます。 最初の文字は、10 進数区切り文字のすぐ左方にあるグループのサイズを表します。 これに続く文字では、前のグループの左方で、後に続くグループを定義します。 最後の文字が UCHAR_MAX ではない場合、最後の文字をサイズとして使用して、グループ化が反復されます。 最後の文字が UCHAR_MAX の場合、すでにストリング内にあるグループに対してのみグループ化が行われます (反復なし)。 グループ化の処理方法については、表 1を参照してください。 ""
char *positive_sign 通貨数量で使用される正符号を示すストリング。 ""
char *negative_sign 通貨数量で使用される負符号を示すストリング。 ""
char int_frac_digits 国際的にフォーマット済みの通貨数量に対して、その小数部の右側に表示される桁の数。 UCHAR_MAX
char frac_digits 通貨数量における小数部の右側の桁の数。 UCHAR_MAX
char p_cs_precedes currency_symbol が、負でないフォーマット済みの通貨数量の値の前に追加されている場合は 1、追加されていない場合は 0 UCHAR_MAX
char p_sep_by_space currency_symbol が、負でないフォーマット済みの通貨数量の値からスペースで分離されている場合は 1、分離されていない場合は 0 UCHAR_MAX
char n_cs_precedes currency_symbol が負のフォーマット済みの通貨数量の値の前に追加されている場合は 1、追加されていない場合は 0 UCHAR_MAX
char n_sep_by_space currency_symbol が、負のフォーマット済みの通貨数量の値からスペースで分離されている場合は 1、分離されていない場合は 0 UCHAR_MAX
char p_sign_posn 負でないフォーマット済み通貨数量 の positive_sign の位置を示す値。 UCHAR_MAX
char n_sign_posn 負のフォーマット済み通貨数量の negative_sign の位置を示す値。 UCHAR_MAX

"" の値のストリングへのポインターは、値が C ロケールでは使用できない、または長さが 0 であることを示します。値が UCHAR_MAXchar 型は、値が現行ロケールで使用できないことを示します。

n_sign_posn および p_sign_posn エレメントは、次の値を持つことができます。
意味
0
数量および 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. 通貨フォーマットの例
国別 正フォーマット 負フォーマット 国際フォーマット
イタリア L.1.230 -L.1.230 ITL.1.230
オランダ F 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 "ITL." "NLG" "NOK" "CHF"
currency_symbol "L." "F" "kr" "SFrs."
mon_decimal_point "" "," "," "."
mon_thousands_sep "." "." "." ","
mon_grouping "\3" "\3" "\3" "\3"
positive_sign "" "" "" ""
negative_sign "-" "-" "-" "C"
int_frac_digits 0 2 2 2
frac_digits 0 2 2 2
p_cs_precedes 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;
 }