lconv | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


lconv

概要

数値と通貨を書式化することに関する情報を集めた型。

ヘッダ

locale.h

形式

struct lconv {
    char *decimal_point;
    char *thousands_sep;
    char *grouping;
    char *int_curr_symbol;
    char *currency_symbol;
    char *mon_decimal_point;
    char *mon_thousands_sep;
    char *mon_grouping;
    char *positive_sign;
    char *negative_sign;
    char int_frac_digits;
    char frac_digits;
    char p_cs_precedes;
    char p_sep_by_space;
    char n_cs_precedes;
    char n_sep_by_space;
    char p_sign_posn;
    char n_sign_posn;
};
    

詳細

「形式」に挙げたメンバは、標準で必ず持つことが定められているが、これら以外にもメンバを持つ可能性がある。各メンバの意味は次のとおり。

メンバ 意味
decimal_point 金額以外に使う、小数点文字
thousands_sep 金額以外に使う、数字群分離文字
grouping 金額以外に使う、数字群桁数
int_curr_symbol 国際通貨記号と金額を分離する文字
currency_symbol 現在のロケールのための地域的通貨記号
mon_decimal_point 金額用の小数点文字
mon_thousands_sep 金額用の数字群分離文字
mon_grouping 金額用の数字群桁数
positive_sign 金額の正の符号文字
negative_sign 金額の負の符号文字
int_frac_digits 国際金額書式のための小数部の桁数
frac_digits その地域向けの金額書式において、表示される小数部の桁数
p_cs_precedes 通貨記号が、負でない金額の手前に付くなら 1、後に付くなら 0
p_sep_by_space その地域向けの負でない金額の書式において、通貨記号、符号、値のそれぞれの区切り方を表す。0 の場合、通貨記号と値を区切らない。1 の場合、通貨記号と値の間を1つの空白文字で区切る。
2 の場合、通貨記号と符号が隣接していれば、1つの空白文字でそれらを区切る。通貨記号と符号が隣接していなければ、符号と値の間を1つの空白文字で区切る。
n_cs_precedes 通貨記号が、負の金額の手前に付くなら 1、なければ 0
n_sep_by_space その地域向けの負の金額の書式において、通貨記号、符号、値のそれぞれの区切り方を表す。0 の場合、通貨記号と値を区切らない。1 の場合、通貨記号と値の間を1つの空白文字で区切る。
2 の場合、通貨記号と符号が隣接していれば、1つの空白文字でそれらを区切る。通貨記号と符号が隣接していなければ、符号と値の間を1つの空白文字で区切る。
p_sign_posn 負でない金額と通貨記号に対する、正の符号の位置を表す。
0 の場合、値と通貨記号を括弧で囲む。1 の場合、符号が値と通貨記号よりも手前に位置する。2 の場合、符号が値と通貨記号の後ろに位置する。3 の場合、符号が通貨記号の直前に位置する。4 の場合、符号が通貨記号の直後に位置する。
n_sign_posn 負の金額と通貨記号に対する、負の符号の位置を表す。
0 の場合、値と通貨記号を括弧で囲む。1 の場合、符号が値と通貨記号よりも手前に位置する。2 の場合、符号が値と通貨記号の後ろに位置する。3 の場合、符号が通貨記号の直前に位置する。4 の場合、符号が通貨記号の直後に位置する。

型が char* のメンバについては ""、char型のメンバについては CHAR_MAX であるとき、そのメンバについては、値が与えられていないことを意味する。

注意

使用例

#include <stdio.h>
#include <locale.h>

static void print_lconv();

int main(void)
{
    setlocale(LC_ALL, "");
    print_lconv();

#if defined(_MSC_VER)
    setlocale(LC_ALL, "spanish");
#elif defined(__clang__)
    setlocale(LC_ALL, "es_ES");
#endif
    print_lconv();
}

void print_lconv()
{
    const struct lconv* lc = localeconv();

    printf("--- %s ---\n", setlocale(LC_ALL, NULL));

    printf("decimal_point == %s\n", lc->decimal_point);
    printf("thousands_sep == %s\n", lc->thousands_sep);
    printf("grouping == %s\n", lc->grouping);
    printf("int_curr_symbol == %s\n", lc->int_curr_symbol);
    printf("currency_symbol == %s\n", lc->currency_symbol);
    printf("mon_decimal_point == %s\n", lc->mon_decimal_point);
    printf("mon_thousands_sep == %s\n", lc->mon_thousands_sep);
    printf("mon_grouping == %s\n", lc->mon_grouping);
    printf("positive_sign == %s\n", lc->positive_sign);
    printf("negative_sign == %s\n", lc->negative_sign);
    printf("int_frac_digits == %c\n", lc->int_frac_digits);
    printf("frac_digits == %c\n", lc->frac_digits);
    printf("p_cs_precedes == %c\n", lc->p_cs_precedes);
    printf("p_sep_by_space == %c\n", lc->p_sep_by_space);
    printf("n_cs_precedes == %c\n", lc->n_cs_precedes);
    printf("n_sep_by_space == %c\n", lc->n_sep_by_space);
    printf("p_sign_posn == %c\n", lc->p_sign_posn);
    printf("n_sign_posn == %c\n", lc->n_sign_posn);

    printf("\n\n");
}

実行結果 (Visual Studio):

--- Japanese_Japan.932 ---
decimal_point == .
thousands_sep == ,
grouping == 
int_curr_symbol == JPY
currency_symbol == \
mon_decimal_point == .
mon_thousands_sep == ,
mon_grouping == 
positive_sign ==
negative_sign == -
int_frac_digits ==
frac_digits ==
p_cs_precedes == 
p_sep_by_space ==
n_cs_precedes == 
n_sep_by_space ==
p_sign_posn == 
n_sign_posn == 


--- Spanish_Spain.1252 ---
decimal_point == ,
thousands_sep == .
grouping == 
int_curr_symbol == EUR
currency_symbol == ?
mon_decimal_point == ,
mon_thousands_sep == .
mon_grouping == 
positive_sign ==
negative_sign == -
int_frac_digits == 
frac_digits == 
p_cs_precedes == 

関連

lconv構造体の値は、localeconv関数が返すポインタを経由して得られる。

解説章


参考リンク


更新履歴

’2018/4/10 メンバに与えられる値が意味付けされている項目について、それぞれの意味を追記した。

’2018/4/2 「VisualC++」という表現を「VisualStudio」に統一。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る