Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

       strfmon - 金額の値を文字列に変換する

書式

       #include <monetary.h>

       ssize_t strfmon(char *s, size_t max, const char *format, ...);

説明

       strfmon()   関数は、指定された数量を format で指定されたフォーマットにしたがって整形し、 結果をサイズ max
       の文字配列 s に書きこむ。

       format 中の通常の文字は、変換されずにそのまま s にコピーされる。変換指定は '%' 文字で始まる。  この直後に
       は、以下のフラグを 0 個以上続けることができる。

       =f     1  バイト文字  f を数値埋め文字 (numeric fill character) にする (左精度と共に用いる。以下を参照)。
              指定されないと、スペース文字が用いられる。

       ^      現在のロケールで定義されているであろうグループ化文字 (grouping character) を一切使わない。デフォル
              トではグループ化は有効になっている。

       ( または +
              (  フラグは、負の数値を括弧で括ることを意味する。 + フラグは符号をデフォルトのように取り扱うことを
              意味する (すなわち数値の前にロケールの符号マークが置かれる。 例えば正ならなにもなく、負なら '-' を
              置く、など)。

       !      通貨シンボルを省略する。

       -      すべてのフィールドを左詰めにする。デフォルトは右詰め。

       次の位置には、フィールドの幅を指定できる。   10  進の数値文字列で、フィールドの最小幅をバイト単位で指定す
       る。 デフォルトは 0。 結果がこの幅よりも狭くなった場合には、 不足分がスペースで埋められる (左詰めフラグが
       指定されていなければ左側が埋められる)。

       次の位置には、"#"  に 10 進数値文字列を続けた形式で、 左精度 (left precision) を指定できる。 通貨の基数点
       (radix) より左側の数値の桁数がこの指定より小さい場合は、 数値埋め文字で左側が埋められる。  このフィールド
       幅の指定では、グループ化文字はカウントされない。

       次の位置には、"." に 10 進数値文字列を続けた形式で、 右精度 (right precision) を指定できる。 整形される数
       値は、整形前にこの桁数に丸められる。 デフォルトではカレントロケールの frac_digitsint_frac_digits の指
       定を用いる。  右精度が  0  の場合は、基数点文字  (radix  character)  は印字されない (ここでの基数点文字は
       LC_MONETARY で定義されており、 LC_NUMERIC の指定とは異なっていてもよい)。

       最後に、変換指定は変換文字 (conversion character)  で終了しなければならない。 変換文字には以下の 3 つがあ
       る。

       %      (この場合は指定全体が "%%" でなければならない。)  結果の文字列に '%' 文字を書きこむ。

       i      double  型の引き数ひとつが、 ロケールの国際通貨フォーマット (international currency format) を用い
              て変換される。

       n      double 型の引き数ひとつが、 ロケールの国内通貨フォーマット (national currency format)   を用いて変
              換される。

返り値

       strfmon()  関数は、結果の文字列が終端のヌルバイトを含めて配列 s に収まった場合には、 s に書きこまれた文字
       数を返す。ヌルバイトは文字数に入らない。 それ以外の場合には、 errnoE2BIG を設定して -1 を返す。  この
       場合の配列の内容は未定義である。

準拠

       POSIX.1-2001 にはない。 他のいくつかのシステムに存在する。

       次のような関数コール

           strfmon(buf, sizeof(buf), "[%^=*#6n] [%=*#6i]",
                   1234.567, 1234.567);

       は、オランダのロケールでは以下のような出力になる。

           [ fl **1234,57] [ NLG **1 234,57]

       (fl は "florijnen" の意。NLG は Netherlands Guilder。)  グループ化文字を用いると非常に醜くなる。 同時に間
       違いなく混乱の原因にもなってしまうだろう。 これは数値の半分以下の幅であるべきだが、  数値と同じだけの幅を
       取ってしまうからである。  ひどいことに、  "fl"  の前後にはスペースが入ってしまい、  また "NLG" の前には 1
       つ、後には 2 つのスペースが置かれている。  これはロケールファイルのバグであろう。  イタリア、オーストラリ
       ア、スイス、ポルトガルの 各ロケールでの結果は以下のようになる。

           [ L. **1235] [ ITL **1.235]
           [ $**1234.57] [ AUD **1,234.57]
           [Fr. **1234,57] [CHF **1.234,57]
           [ **1234$57Esc] [ **1.234$57PTE ]

関連項目

       setlocale(3), sprintf(3), locale(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。