日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

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

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

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


目次 索引




金額値を文字列に変換します。変換は書式文字列によって制御されます。

形式

#include <monetary.h>

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


引数



s

結果として得られる文字列へのポインタ。

maxsize

結果として得られる文字列に格納される最大バイト数。

format

出力文字列の書式を制御する文字列へのポインタ。

...

出力文字列へと整形される double型の金額値。 format がポイントする書式文字列の中の変換指定と同じ数の値がなくてはなりません。値が足りなかった場合,関数は実行に失敗します。余分な引数は無視されます。

説明

strfmon関数は,指定された金額値を使用して, s がポイントする文字列を作成します。最高 maxsize バイトが s にコピーされます。

format がポイントする書式文字列は,通常の文字と変換指定から構成されています。すべての通常の文字は,変更なしに出力文字列にコピーされます。変換指定は,指定された金額値の 1 つが,出力文字列でどのように整形されるかを定義します。

変換指定は,パーセント文字 (%),いくつかのオプションの文字 ( 表 1-5 を参照 ),および変換指定子 ( 表 1-6 を参照 ) から構成されます。

表 1-5 に示しているオプション文字が変換指定に含まれる場合,それらの文字は表に示した順序で現れなくてはなりません。

表 1-5 strfmon の変換指定に含まれるオプションの文字
文字 意味
= character 小数点以上の桁数を指定した場合に, character を数値フィル文字として使用する。デフォルトの数値フィル文字はスペース文字である。フィル文字は,有効桁数と幅のカウントに対応できるように, 1 バイトとして表現できなくてはならない。この変換指定子は,小数点以上の桁数が指定されなかった場合には無視される。また,幅のフィルはつねにスペース文字を使用するので,この変換指定子の影響を受けない。
^ 数値の書式指定に区切り文字を使用しない。デフォルトでは,桁は現在のロケールの LC_MONETARY カテゴリの mon_grouping フィールドに従ってグループ化される。
+ 現在のロケールの positive_sign または negative_sign フィールドで指定された文字列を追加する。 p_sign_posn または n_sign_posn が 0 に設定されている場合,デフォルトでは負の値を示すために括弧が使用される。それ以外の場合には,符号文字列が値の符号を示すために使用される。同じ変換指定で + と ( を同時に使用することはできない。
( 負の値を括弧で囲む。デフォルトの設定には,現在のロケールの p_sign_posn または n_sign_posn フィールドが使用される。 p_sign_posn または n_sign_posn が 0 に設定されている場合,デフォルトでは負の値を示すために括弧が使用される。それ以外の場合には,符号文字列が値の符号を示すために使用される。同じ変換指定で + と ( を同時に使用することはできない。
! 通貨シンボルを抑止する。デフォルトでは,通貨シンボルが追加される。
-- フィールド内で値を左揃えにする。デフォルトでは,値は右揃えになる。
フィールド幅 変換の結果の位置を揃えるときに使用される最小のフィールド幅を指定する 10 進整数。デフォルトのフィールド幅は,結果を格納できる最も小さいフィールドである。
#left_precision # の後の 10 進整数は,小数点以上の桁数を指定する。余った桁はフィル文字によって埋められる。デフォルトでは,引数に必要な最小限の桁数が使用される。 ^ 変換指定子でグループ化が抑止されておらず,現在のロケールでグループ化が定義されていた場合には,フィル文字が追加される前にグループ化の区切り文字が挿入される。グループ化の区切り文字は,フィル文字が数字として定義されている場合でも,フィル文字には適用されない。
.right_precision ピリオド (.) の後の 10 進整数は,小数点以下の桁数を指定する。余分な桁はゼロで埋められる。値はこの小数点以下の桁数にまで丸められる。小数点以下の桁数がゼロである場合,出力には小数点は含められない。デフォルトでは,小数点以下の桁数は現在のロケールの frac_digits または int_frac_digits フィールドによって定義される。

表 1-6 strfmon の変換指定子
指定子 意味
i 通貨シンボルが抑止されていなければ,現在のロケールの int_currency_symbol フィールドによって定義されている国際通貨シンボルを使用する。
n 通貨シンボルが抑止されていなければ,現在のロケールの currency_symbol フィールドによって定義されているローカル通貨シンボルを使用する。
% % 文字を出力する。変換指定は %% でなくてはならない。この指定子では,どのオプション文字も使用できない。


戻り値

x s がポイントする文字列に書き込まれるバイト数。終端の null 文字は含みません。
-1    エラーを示します。関数は errno を以下のいずれかの値に設定します。

  • EINVAL---変換指定の構文が間違っている。

  • E2BIG---書式文字列全体を処理すると,出力が maxsize バイトを超える。


#include <stdlib.h> 
#include <stdio.h> 
#include <locale.h> 
#include <monetary.h> 
#include <errno.h> 
 
#define MAX_BUF_SIZE 124 
 
main() 
{ 
  size_t ret; 
  char buffer[MAX_BUF_SIZE]; 
  double amount = 102593421; 
 
 /* Display a monetary amount using the en_US.ISO8859-1 */ 
 /* locale and a range of different display formats.    */ 
 
  if (setlocale(LC_ALL, "en_US.ISO8859-1") == (char *) NULL) { 
      perror("setlocale"); 
      exit(EXIT_FAILURE); 
  } 
  ret = strfmon(buffer, MAX_BUF_SIZE, "International: %i\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %n\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %=*#10n\n", amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:     %(n\n", -1 * amount); 
  printf(buffer); 
 
  ret = strfmon(buffer, MAX_BUF_SIZE, "National:      %^!n\n", amount); 
  printf(buffer); 
} 

この例のプログラムを実行すると,次の出力が生成されます。

International: USD 102,593,421.00 
National:      $102,593,421.00 
National:      $**102,593,421.00 
National:      ($102,593,421.00) 
National:      102593421.00 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.