C言語/標準ライブラリ/locale.h
ヘッダー <locale.h> は、2つの関数と1つの型を宣言し、いくつかのマクロを定義しています[1]。
型
[編集]ヘッダー <locale.h> で定義される型 struct lconv で、数値のフォーマットに関連するメンバーを含む。この構造体は、少なくとも以下のメンバーを任意の順序で含まなければならない。メンバーのセマンティクスとその正常範囲は、#localeconv関数 で説明します。C "ロケールでは、メンバーはコメントで指定された値を持ちます。
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; // ""
char frac_digits; // CHAR_MAX
char p_cs_precedes; // CHAR_MAX
char n_cs_precedes; // CHAR_MAX
char p_sep_by_space; // CHAR_MAX
char n_sep_by_space; // CHAR_MAX
char p_sign_posn; // CHAR_MAX
char n_sign_posn; // CHAR_MAX
char *int_curr_symbol; // ""
char int_frac_digits; // CHAR_MAX
char int_p_cs_precedes; // CHAR_MAX
char int_n_cs_precedes; // CHAR_MAX
char int_p_sep_by_space; // CHAR_MAX
char int_n_sep_by_space; // CHAR_MAX
char int_p_sign_posn; // CHAR_MAX
char int_n_sign_posn; // CHAR_MAX
struct lconv のメンバー
[編集]- char *decimal_point
- 通貨以外の量のフォーマットに使用される小数点を表す文字。
- char *thousands_sep
- 通貨以外の量のフォーマットにおいて、小数点文字の前の数字のグループを区切るための文字。
マクロ
[編集]ヘッダー <locale.h> で定義されるマクロは、NULL と
- LC_ALL
- LC_COLLATE;
- LC_CTYPE
- LC_MONETARY
- LC_NUMERIC
- LC_TIME
で、値が明確な整数の定数式に展開され、setlocale関数の第一引数として使用するのに適しています。また、LC_ と大文字で始まる追加のマクロ定義も実装によって指定できます。
概要
[編集]#include <locale.h>
char *setlocale(int category, const char *locale);
struct lconv *localeconv(void);
解説
[編集]setlocale関数
[編集]setlocale()
関数は、プログラムの現在のロケールを設定または照会するために使用します。
locale
がNULL
でない場合、プログラムの現在のロケールは引数に応じて引数に応じて変更されます。
引数 category
は、プログラムの現在のロケールのどの部分を修正するかを決めます。
locale
がNULL
の場合、現在のロケールは問い合わせをするだけで変更はません。
localeconv関数
[編集]localeconv()
関数は、現在のロケールの構造体lconv
へのポインタを返します。
この構造体は次のセクションで示され、ロケールカテゴリ LC_NUMERIC' および LC_MONETARY に関連するすべての値を含みます。
プログラムでは、関数printf()
やstrfmon()
を使用することもできますが、これらは実際に使用されているロケールに応じて動作します。
lconv構造体
[編集]The struct lconv
contains the following fields:
struct lconv
には、以下のフィールドがあります。
(非貨幣性)数値情報
[編集]char *decimal_point;
小数点を表す文字。
char *thousands_sep;
小数点の左にある桁グループの区切り文字。
char *grouping;
各要素はグループ内の桁数であり、インデックスが大きい要素はさらに左になります。
CHAR_MAX
という値を持つ要素は、それ以上のグループ化が行われないことを意味します。
0
の値を持つ要素は、前の要素が左隣のすべてのグループに使用されることを意味します。
通貨情報
[編集]char *int_curr_symbol;
最初の3文字は通貨記号 ISO 4217の通貨記号です。
4番目の文字は セパレータです。
5文字目は'0'
です。
char *currency_symbol;
現地通貨記号。
char *mon_decimal_point;
上記 decimal_point
に同じ。
char *mon_thousands_sep;
上記 thousands_sep
に同じ。
char *mon_grouping;
上記 grouping
に同じ。
char *positive_sign;
正の値を示す符号。
char *negative_sign;
負の値を示す符号。
char int_frac_digits;
国際的な小数点以下の桁数。
char frac_digits;
ローカルな小数点以下の数字。
char p_cs_precedes;
currency_symbol
の前に正の値がある場合は1
、成功した場合は0
とります。
char p_sep_by_space;
正の金額のとき、通貨記号と金額をスペースで区切るなら、currency_symbol
を 1
とします。
char n_cs_precedes;
負の金額のとき、通貨記号が符号に前置するならばcurrency_symbol
を 1
に、さもなければ 0
になります。
char n_sep_by_space;
負の金額をセパレータで区切る場合、currency_symbol
は 1
に、さもなければ 0
になります。
char p_sign_posn;
char n_sign_posn;
正負の符号位置:
0
: 括弧で囲まれた数量とcurrency_symbol
1
: 符号文字列が数量の前にあり、つづいてcurrency_symbol
2
: 符号文字列は、数量とcurrency_symbol
に続く3
: 符号文字列は、currency_symbol
の直前にあります。4
: 符号文字列は、currency_symbol
の直後に
例
[編集]#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
/* Locale is set to "C" before this. This call sets it
to the "current locale" by reading environment variables: */
setlocale(LC_ALL, "");
const struct lconv * const currentlocale = localeconv();
printf("In the current locale, the default currency symbol is: %s\n",
currentlocale->currency_symbol);
return EXIT_SUCCESS;
}
外部リンク
[編集]- locale.h by OpenGroup
- localeconv by OpenGroup
- setlocale by OpenGroup
- ^ N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 223, §7.11 Localization <locale.h> .