日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




struct lconv型の構造体のメンバを,現在のロケールの規則に従って数値の書式を設定するための値に設定します。

形式

#include <locale.h>

struct lconv *localeconv (void);


説明

localeconv関数は, <locale.h>ヘッダ・ファイルに定義されている lconv構造体へのポインタを返します。この構造体は,プログラムから変更してはなりません。これは localeconvの呼び出しか,LC_NUMERIC,LC_MONETARY,または LC_ALL カテゴリを変更する setlocale関数の呼び出しによって上書きされます。

この構造体のメンバは以下のとおりです。

メンバ 説明
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 正の金額値で,ローカルまたは国際通貨シンボルが数字の前に置かれる場合には 1 に,シンボルが数字の後に置かれる場合には 0 に設定される。
char p_sep_by_space 正の金額値で,通貨シンボルと数字の間にスペースがない場合には 0 に設定される。スペースがある場合には 1 に,シンボルと符号文字列の間にスペースがある場合には 2 に設定される。
char n_cs_precedes 負の金額値で,ローカルまたは国際通貨シンボルが数字の前に置かれる場合には 1 に,シンボルが数字の後に置かれる場合には 0 に設定される。
char n_sep_by_space 負の金額値で,通貨シンボルと数字の間にスペースがない場合には 0 に設定される。スペースがある場合には 1 に,シンボルと符号文字列の間にスペースがある場合には 2 に設定される。
char p_sign_posn 負でない金額で, positive_sign 文字列をどこに置くかを指定するために使用される整数。
char n_sign_posn 負の金額で, negative_sign 文字列をどこに置くかを指定するために使用される整数。

char* 型の構造体のメンバは文字列へのポインタであり,そのうちの (decimal_point を除く) 任意のものが "" をポイントすることができます。これは,対応する値が現在のロケールでは使用できないか,長さゼロであることを示します。 char型の構造体のメンバは正の数値で,そのうちの任意のものが CHAR_MAX になることができます。これは,対応する値が現在のロケールでは使用できないことを示します。 CHAR_MAX は <limits.h>ヘッダ・ファイルに定義されています。

<limits.h>ヘッダの中の CHAR_MAX マクロの値は,プログラムが/UNSIGNED_CHAR 修飾子を付けてコンパイルされたかどうかに依存することに注意してください。

  • CHAR_MAX マクロを,現在のロケールで使用できない値を示すために使用するのは,プログラムが /UNSIGNED_CHAR なしでコンパイルされた場合に限られる ( デフォルトは /NOUNSIGNED_CHAR)。

  • プログラムが /UNSIGNED_CHAR 指定してコンパイルされた場合には, CHAR_MAX マクロの代わりに SCHAR_MAX マクロを使用する。

/NOUNSIGNED_CHAR モードでは,CHAR_MAX と SCHAR_MAX の値は同じです。このため,SCHAR_MAX との比較では,どちらの /[NO]UNSIGNED_CHAR モードを使用しているかにかかわらず,正しい結果が得られます。

メンバ grouping と mon_grouping は,数値をフォーマットするときの,個々の桁のグループのサイズを定義する文字列をポイントします。個々のグループ・サイズはセミコロン (;) によって区切られます。たとえば,grouping が文字列 5;3 をポイントしており, thousands_sep 文字がコンマ (,) ならば,数値 123450000 は 1,234,50000 にフォーマットされます。

grouping と mon_grouping の要素は,次のように解釈されます。

解釈
CHAR_MAX それ以上のグループ化は行われない。
0 残りの桁については,直前の要素を繰り返し使用する。
その他 整数値は,現在のグループを構成する桁の数である。現在のグループの前に,次の要素を調べて,次の桁グループのサイズが決定される。

p_sign_posn と n_sign_posn の値は,次のように解釈されます。

解釈
0 数値と通貨シンボルは括弧で囲まれる。
1 符号文字列は数値と通貨シンボルの前に置かれる。
2 符号文字列は数値と通貨シンボルの後に置かれる。
3 符号文字列は数値と通貨シンボルの直前に置かれる。
4 符号文字列は数値と通貨シンボルの直後に置かれる。


戻り値

x lconv 構造体へのポインタ。


#include <stdlib.h> 
#include <stdio.h> 
#include <limits.h> 
#include <locale.h> 
#include <string.h>                                        
 
/* The following test program will set up the British English   */ 
/* locale, and then extract the International Currency symbol   */ 
/* and the International Fractional Digits fields for this      */ 
/* locale and print them.                                       */ 
 
int main() 
{ 
    /* Declare variables                                        */ 
 
    char *return_val; 
    struct lconv *lconv_ptr; 
 
    /* Load a locale                                            */ 
 
    return_val = (char *) setlocale(LC_ALL, "en_GB.iso8859-1"); 
 
    /* Did the locale load successfully?                        */ 
 
    if (return_val == NULL) { 
 
        /* It failed to load the locale                         */ 
       printf("ERROR : The locale is unknown"); 
        exit(EXIT_FAILURE); 
    } 
 
    /*  Get the lconv structure from the locale                 */ 
 
    lconv_ptr = (struct lconv *) localeconv(); 
 
    /* Compare the international currency symbol string with an */ 
    /* empty string. If they are equal, then the international  */ 
    /* currency symbol is not defined in the locale.            */ 
 
    if (strcmp(lconv_ptr->int_curr_symbol, "")) { 
        printf("International Currency Symbol = %s\n", 
               lconv_ptr->int_curr_symbol); 
    } 
    else { 
        printf("International Currency Symbol ="); 
        printf("[Not available in this locale]\n"); 
    } 
 
    /* Compare International Fractional Digits with CHAR_MAX.   */ 
    /* If they are equal, then International Fractional Digits  */ 
    /* are not defined in this locale.                          */ 
 
    if ((unsigned char) (lconv_ptr->int_frac_digits) != CHAR_MAX) { 
        printf("International Fractional Digits = %d\n", 
               lconv_ptr->int_frac_digits); 
    } 
    else { 
        printf("International Fractional Digits ="); 
        printf("[Not available in this locale]\n"); 
    } 
} 

上の例のプログラムを実行すると,次の結果が出力されます。

International Currency Symbol = GBP 
International Fractional Digits = 2 


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡