標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
XPG4 |
両方 |
#define _XOPEN_SOURCE
#include <monetary.h>
ssize_t strfmon(char * __restrict__ s, size_t maxsize,
const char * __restrict__ format, …);
strfmon() は、double 引数からフォーマット設定された通貨出力ストリングを生成します。 この関数は、機能が拡張されて、__isBFP() 関数を利用して浮動小数点形式引数 (16 進数浮動小数点または IEEE 2 進数浮動小数点) を判断できるようになりました。
format が指すストリングによって制御されるように、文字を *s が指す配列に入れます。maxsize が示す数より多い文字数を、配列に入れることはできません。
文字ストリング format には、2 つのタイプのオブジェクトが含まれています。1 つは出力配列にコピーされるプレーン文字で、もう 1 つはディレクティブです。それぞれの結果として、変換とフォーマット設定が行われるゼロ個以上の引数が取り出されます。format の引数が不十分な場合は、結果は未定義です。引数が残っているのに、format が使い尽くされている場合、余分な引数は無視されます。s および format で指定されるオブジェクトが オーバーラップしている場合、その動作は保証されません。
%% は % で置き換えられます。引数は変換されません。
確実に位置合わせをするために、フォーマット設定された出力において、数の前後に表示されるどのような文字も (通貨または符号シンボルなど)、その正または負の形式を等しい長さにするために、必要に応じて、空白文字が埋め込まれます。
プログラムのロケールの LC_MONETARY カテゴリーは、次の ものを組み込むこの関数の動作に影響します。通貨基数文字 (これは、LC_NUMERIC カテゴリーによって影響される数字の基数文字とは 異なります)、千の位 (または代替グループ) の区切り、通貨記号 および形式。国際通貨記号は、通貨および資金の表示のために、ISO4217 コード で指定されたものと一致していることが必要です。
LC_MONETARY カテゴリーには、国内と国際の両方の通貨数量を出力するためのフォーマット設定の選択肢が指定されています。 国内フォーマットは、p_cs_precedes、n_cs_precedes、p_sign_posn、n_sign_posn、p_sep_by_space、および n_sep_by_space の設定値によって決定されます。ISO/IEC 標準への準拠のために、同等な国際フォーマット用のメンバーのセットが追加されています。 国際フォーマットについて詳しくは、locale.hを参照してください。
sep_by_space | sign_posn | ||||
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | |
0 | ($123.00) | +$123.00 | $123.00+ | +$123.00 | $+123.00 |
1 | ($ 123.00) | +$ 123.00 | $ 123.00+ | +$ 123.00 | $+ 123.00 |
2 | ($123.00) | + $123.00 | $123.00 + | + $123.00 | $ +123.00 |
sep_by_space | sign_posn | ||||
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | |
0 | (123.00$) | +123.00$ | 123.00$+ | 123.00+$ | 123.00$+ |
1 | (123.00 $) | +123.00 $ | 123.00 $+ | 123.00 +$ | 123.00 $+ |
2 | (123.00$) | + 123.00$ | 123.00$ + | 123.00+ $ | 123.00$ + |
終了 NULL 文字を組み込む結果バイトの合計数が maxsize 以下である場合、strfmon() は、s が指す配列に入れられたバイト数 (終了 NULL 文字を含まない) を戻します。
⁄* CELEBS41 *⁄
#include <localdef.h>
#include <monetary.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char string[100]; ⁄* hold the string returned from strfmon() *⁄
double money = 1234.56;
if (setlocale(LC_ALL, "En_US") == NULL) {
printf("Unable to setlocale().¥n");
exit(1);
}
strfmon(string, 100, "%i", money);
printf("%s¥n",string);
strfmon(string, 100, "%n", money);
printf("%s¥n",string);
}
例
/* EUROSAMP
This example sets the locale to Fr_BE.IBM-1148
and Fr_BE.IBM-1148@euro and prints a value with
the locales national and international currency
format.
*/
#include <localdef.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char string[100];
double money = 1234.56;
if (setlocale(LC_ALL,"Fr_BE.IBM-1148") == NULL) {
printf("Unable to setlocale().¥n");
exit(1);
}
strfmon(string,100,"%i",money);
printf("%s¥n",string);
strfmon(string,100,"%n",money);
printf("%s¥n",string);
if (setlocale(LC_ALL,"Fr_BE.IBM-1148@euro") == NULL) {
printf("Unable to setlocale().¥n");
exit(1);
}
strfmon(string,100,"%i",money);
printf("%s¥n",string);
strfmon(string,100,"%n",money);
printf("%s¥n",string);
}
出力
1.234,56 BEF
1.234,56 BF
1.234,56 EUR
1.234,56 <euro-sign>