[C#] 数字フォーマット(お金表示及び小数点以下表示)


Devlopment note / C#    作成日付 : 2020/04/03 00:38:37   修正日付 : 2020/04/03 00:46:31

こんにちは。明月です。


この投稿はC#で数字フォーマット(お金表示及び小数点以下表示)に関する説明です。


我々がプログラム上で数を扱えばintやdouble、decimalのデータタイプで数を使います。その中で計算はおそらくお金と関係があることが多くないかと思います。

でも、お金を計算した結果を出力する時に単純に数だけ表現すると見づらいことになります。特に億や兆単位までなれば行くと間違って読んで間違って判断する可能性もあります。


数を間違って読むことはお金の単位は100万円ですが、コンマなしで1000000円のことに出力されたら一目で100万円に認識するのが難しいことです。つまり1000万円のことで誤解することがあります。

1億の場合は100000000 です。


そのため、我々は誤解しないようにコンマを表示して数の単位を区分します。

static class Program
{
  //実行関数
  static void Main(string[] args)
  {
    // Decimalタイプで1億のデータを格納した。
    Decimal data = 100000000;
    // フォーマットは数字のデータタイプで「ToString」関数で使える。
    // 0が3桁単位でコンマを入れてお金を表示する。
    Console.WriteLine(data.ToString("#,##0"));

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}


上の例をみれば変数に1億を格納して「#,##0」のフォーマットで出力フォーマット(ToString関数)を設定してお金形式で表示しました。

エクセルを使ったことがある方なら数字フォーマット形式を知るかもしりません。数字を表現することで「0」と「#」があります。

この差は「0」の場合は数字データが当該な桁数でデータがなくても「0」を表示することだし、「#」の場合は表示しないことです。


すなわち、フォーマットを「0,000」に設定して「1」のデータを出力すると下記の結果が出力します。


数字は基本「0」と「#」で表現しますが、その以外の表現を説明します。

static class Program
{
  // 実行関数
  static void Main(string[] args)
  {
    // 16進数に変換
    Console.WriteLine(String.Format("{0:X}", 10));

    // 小数点2桁まで表示(小数点以下2桁まで値が無ければ0で表示)
    Console.WriteLine(String.Format("{0:0.00}", 10.1d));
    Console.WriteLine(String.Format("{0:0.00}", 10.111111111111d));

    // 小数点以下2桁まで表示
    Console.WriteLine(String.Format("{0:0.##}", 10.1d));
    Console.WriteLine(String.Format("{0:0.##}", 10.1111111111111111111d));

    // コンマを利用して桁数を表示、総10桁基準で空欄を表示する。
    Console.WriteLine(String.Format("{0,10:#,##0}", 11));
    Console.WriteLine(String.Format("{0,10:#,##0}", 1122));

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}


数字フォーマッティングは「ToString」がよく使いますが、状況によってString.Formatを利用する時もあります。

CultureInfoクラスを利用してお金を表示する方法もあります。CultureInfoはシステムによって地域別お金を表示する方法です。つまり日本なら日本の形式でアメリカならアメリカタイプに表示する機能です。

static class Program
{
  // 実行関数
  static void Main(string[] args)
  {
    // 変数に1億のデータを格納する。
    Decimal data = 100000000;
    // 日本のお金タイプに設定する。
    NumberFormatInfo format =  new CultureInfo("ja-JP", false).NumberFormat;
    // お金を表示したいなら「c」を、ただコンマだけの表示なら「n」を入れる。
    Console.WriteLine(data.ToString("n",format));
    
    // システムのlocation設定によって設定される数字フォーマット
    format = CultureInfo.CurrentCulture.NumberFormat;
    // お金を表示したいなら「c」を、ただコンマだけの表示なら「n」を入れる。
    Console.WriteLine(data.ToString("c", format));

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}


link - https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.cultureinfo?redirectedfrom=MSDN&view=netframework-4.8


ここまでC#で数字フォーマット(お金表示及び小数点以下表示)に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿