C言語で3桁区切りの数値を表示する

仕事で、そういうのが回ってきたので検索。

とあるソフトウェアエンジニアのブログ

ネットを探すとCのサンプルはあるのですが、少々トリッキーなコーディングのものが多いので、C++でのベタな実装というとこで作ってみました。

Windows なら、そういう関数があったような ・ω・;

CURRENCYFMT structure (Windows)
GetCurrencyFormat
数字文字列を、指定したロケールの通貨文字列として書式化します。

あった、これこれ ・ω・


でも構造体が、英語しかなくて分かりづらい

NumDigits

小数点以下の桁数です。 LOCALE_ICURRDIGITS と同等です。

LeadingZero

先頭のゼロは小数フィールドで使用されるべきかどうかを示す値。 LOCALE_ILZERO と同等です。

Grouping

lpDecimalSepで指定された小数点区切り文字の左側に数字の各グループの桁数。 最も重要なグルーピング桁は、小数点のすぐ左に最下位のグループの桁数を示します。 後続の各グルーピング桁は前のグループの左にある数字の次の重要なグループを示します。 供給された最後の値が0でない場合は、残りのグループは最後のグループを繰り返します。 このメンバーの設定の典型的な例は以下のとおりです。

グループの桁に0を指定すれば123456789.00のようになり、

グループの桁に3を指定すれば123,456,789.00のようになり、

グループの数字に32を指定すれば12,34,56,789.00のようになります。

あなたは典型的な設定以外の設定を使用できますが、コントロールパネルの地域と言語の設定部分に表示されません。
このように非常にまれな設定は予期しない結果が生じることがあります。 

lpDecimalSep

NULLで終わる小数点区切り文字列へのポインタ。

lpThousandSep

NULLで終わる桁区切り文字列へのポインタ。

NegativeOrder

負の値の形式。以下と等価です。 LOCALE_INEGCURR

PositiveOrder

正の値の形式。以下と等価です。 LOCALE_ICURRENCY

lpCurrencySymbol

NULLで終わる通貨記号文字列へのポインタ。

翻訳してもなんか分かりにくいですね

 CURRENCYFMTA stCurrency;
  memset(&stCurrency,0,sizeof(stCurrency));
  stCurrency.Grouping=3;  // 3桁区切り
  stCurrency.lpDecimalSep="."; //小数点区切り文字
   stCurrency.lpThousandSep=","; //桁区切り文字
//            stCurrency.NumDigits=0; // 小数点以下はなし
   stCurrency.NegativeOrder=2; // $ -x.x
//            stCurrency.PositiveOrder=0; // $x.x
    stCurrency.lpCurrencySymbol=""; //通貨単位はつけない
 lstrcpyA(str,"12345678");
 GetCurrencyFormatA( NULL, 0, str,&stCurrency,cnmv,sizeof(cnmv));

出力結果は 12,345,678 ・ω・簡単だね



おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です