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_MAX の char 型は、値が現行ロケールで使用できないことを示します。
n_sign_posn および p_sign_posn エレメントは、次の値を持つことができます。
- 値
- 意味
- 0
- 数量および 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 |
| 国別 | 正フォーマット | 負フォーマット | 国際フォーマット |
|---|---|---|---|
| イタリア | 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 |
上記の表は、次の通貨フィールドを使用したロケールで生成されています。
| イタリア | オランダ | ノルウェー | スイス | |
|---|---|---|---|---|
| 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;
}