【C#】数値の書式指定:ToStringで桁数、カンマ、0埋めを制御する方法

目次

数値の書式設定(フォーマット)

C#で数値をToString()メソッドを使って文字列に変換する際、単に値を文字列にするだけでなく、「000123のように0で桁を埋めたい」や「1,234,567のように3桁区切りのカンマを付けたい」、「小数点以下3桁まで表示したい」といった、表示形式を整えたい場合があります。

ToString()メソッドは、引数に「書式指定文字列」を渡すことで、これらの要求に柔軟に応えることができます。

この記事では、C#における数値の書式指定を「標準の書式指定子」と「カスタム書式指定子」の2つのカテゴリに分けて解説します。


標準数値書式指定子

標準の書式指定子は、"N""D"のような単一のアルファベット文字で、一般的な書式(通貨、10進数、16進数、パーセントなど)を簡単に指定するためのものです。

指定子名称説明と例 (例: 1234.5)
D10進数 (Decimal)整数専用"D5" のように桁数を指定すると、0でパディング(01234)されます。
F固定小数点小数点以下の桁数を固定します。"F3" と指定すると 1234.500 となります。
N数値 (Number)1,234.50 のように、3桁区切りのカンマと小数点以下(デフォルト2桁)を付与します。"N0"で小数点以下0桁にできます。
C通貨 (Currency)¥1,234 のように、カルチャ(地域設定)に応じた通貨記号と桁区切りを付与します。"C0"で小数点以下0桁にできます。
E指数 (Exponential)1.234500E+003 のように、科学的指数表記に変換します。
Pパーセント値を100倍し、パーセント記号(%)を付与します。1234.5 -> 123,450.00 %
X16進数整数専用。値を16進数に変換します。

カスタム数値書式指定子

カスタム書式指定子は、0#といった記号を組み合わせて、より詳細で柔軟な書式を定義するためのものです。

記号名称説明
0ゼロプレースホルダー対応する位置に数値が存在しない場合、0で埋めます(パディング)。
#数字プレースホルダー対応する位置に数値が存在する場合のみ表示し、存在しない場合は何も表示しません
.小数点小数点の位置を指定します。
,桁区切り3桁区切り(カンマ)を指定します。(.の手前に置く必要があります)

0# の違い(0埋め)

0# の違いは、数値が指定した桁数に満たない場合の「0埋め」の有無です。

int shortId = 123;

// "00000" : 5桁に満たない部分を 0 で埋める
string formatZero = shortId.ToString("00000"); 
// 結果: "00123"

// "#####" : 5桁を指定するが、# は 0 を強制しない
string formatHash = shortId.ToString("#####");
// 結果: "123"

カンマ区切りと小数点以下の制御

#,0 のパターンは、0の位(1の位)までを必ず表示し、それより上の桁を3桁区切り(#)にする、という定番の書式です。

long largeAmount = 1234567890;
double preciseValue = 12345.6;

// "#,0" : 整数部分を3桁区切りにする
string formatComma = largeAmount.ToString("#,0");
// 結果: "1,234,567,890"

// "#,0.00" : 3桁区切りにし、小数点以下を2桁 (00) で固定する
string formatDecimal = preciseValue.ToString("#,0.00");
// 結果: "12,345.60" (末尾が0でパディングされる)

string.Format と 文字列補間

ToString()メソッドの代わりに、string.Formatメソッドや、より直感的な**文字列補間($)**を使用しても、これらの書式指定子を適用できます。

書式指定は {変数名:書式} のようにコロン(:)の後ろに記述します。


コード例

using System;
using System.Globalization;

public class FormattingExample
{
    public static void Main()
    {
        // カルチャを日本に設定(¥ と , のため)
        CultureInfo.CurrentCulture = new CultureInfo("ja-JP");

        int orderId = 123;
        long totalSales = 2500000;
        double accuracy = 0.987654;

        Console.WriteLine("--- 標準数値書式 ---");
        
        // D (10進数) : 6桁 0埋め
        Console.WriteLine($"注文ID (D6): {orderId.ToString("D6")}");
        
        // N (数値) : 桁区切り (小数点以下0桁)
        Console.WriteLine($"売上 (N0): {totalSales.ToString("N0")}");
        
        // C (通貨) : 通貨記号
        Console.WriteLine($"売上 (C0): {totalSales.ToString("C0")}");

        // F (固定小数点) : 小数点以下3桁
        Console.WriteLine($"精度 (F3): {accuracy.ToString("F3")}");
        
        // P (パーセント) : 小数点以下1桁
        Console.WriteLine($"精度 (P1): {accuracy.ToString("P1")}");


        Console.WriteLine("\n--- カスタム数値書式 ---");

        // 0 (ゼロプレースホルダー)
        Console.WriteLine($"カスタム0埋め: {orderId.ToString("000000")}");
        
        // #,0 (カスタム桁区切り)
        Console.WriteLine($"カスタム桁区切り: {totalSales.ToString("#,0")}");
        
        // #,0.000 (桁区切り + 小数点固定)
        Console.WriteLine($"カスタム小数点: {accuracy.ToString("#.000")}");
        

        Console.WriteLine("\n--- 文字列補間 ---");
        
        // string.Format や ToString() の代わりに、文字列補間($)を使う
        string summary = $"ID: {orderId:D6} の売上は {totalSales:C0} です。";
        Console.WriteLine(summary);
    }
}

出力結果:

--- 標準数値書式 ---
注文ID (D6): 000123
売上 (N0): 2,500,000
売上 (C0): ¥2,500,000
精度 (F3): 0.988
精度 (P1): 98.8%

--- カスタム数値書式 ---
カスタム0埋め: 000123
カスタム桁区切り: 2,500,000
カスタム小数点: .988

--- 文字列補間 ---
ID: 000123 の売上は ¥2,500,000 です。

まとめ

数値を文字列に変換する際、ToString()メソッドに書式指定子を渡すことで、表示形式を細かく制御できます。

  • 標準書式 ("N", "C", "D5"など): 一般的な要件(通貨、0埋め)を素早く満たします。
  • カスタム書式 ("#,0.00"など): 桁区切りや0埋め、小数点以下の桁数を組み合わせて、独自の書式を定義できます。

これらの書式指定は、string.Formatや文字列補間($)でも同様に利用でき、C#でのUI表示やログ出力において不可欠な機能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次