C#で数値を扱う際、IDや日付、伝票番号などの表示形式を整えるために「4桁の0埋め(ゼロパディング)」を行いたいケースは非常に多くあります。

例えば、1という数値を0001として出力する処理です。

C#には、数値を特定の桁数で整えるための方法が複数用意されており、状況に応じて最適な手法を選択することが可能です。

本記事では、初心者の方から実務で効率的なコードを書きたいエンジニアの方まで幅広く役立つ、C#で4桁の0埋めを実現する具体的な書き方を徹底解説します。

ToStringメソッドを使用した4桁の0埋め

C#において最もポピュラーで直感的な方法が、数値型のToStringメソッドを利用する方法です。

このメソッドの引数に書式指定文字列を渡すことで、簡単に0埋めを実現できます。

標準数値書式指定子「D」を使う方法

整数型(int, longなど)で利用できるのが、10進数(Decimal)を示す「D」書式指定子です。

Dの後に続く数字が、出力したい最小の桁数となります。

C#
using System;

public class Program
{
    public static void Main()
    {
        int number = 12;
        
        // "D4"と指定することで、4桁になるよう0で埋める
        string result = number.ToString("D4");
        
        Console.WriteLine(result);
    }
}
実行結果
0012

この「D」指定子の特徴は、整数型にしか適用できない点に注意が必要です。

浮動小数点数(doubledecimal)に対してToString("D4")を呼び出すと、実行時エラーが発生します。

カスタム数値書式指定子「0」を使う方法

もう一つの方法は、カスタム書式指定子として0を並べる方法です。

これは「その位置に数字がない場合は0を表示する」というルールに基づいています。

C#
using System;

public class Program
{
    public static void Main()
    {
        int id = 5;
        double price = 1.5;

        // "0000"と記述することで、4桁固定にする
        string formattedId = id.ToString("0000");
        
        // 浮動小数点数にも適用可能(整数部分を4桁にする)
        string formattedPrice = price.ToString("0000");

        Console.WriteLine($"ID: {formattedId}");
        Console.WriteLine($"Price: {formattedPrice}");
    }
}
実行結果
ID: 0005
Price: 0001

ToString("0000")は、型を選ばず柔軟に使えるため、非常に汎用性が高い書き方です。

文字列補間($)によるスマートな記述

モダンなC#(C# 6.0以降)において、最も推奨される書き方が文字列補間(String Interpolation)です。

文字列の中に直接変数を埋め込みつつ、書式を指定できるため、コードの可読性が飛躍的に向上します。

文字列補間での書式指定

文字列補間を使用する場合、変数の後にコロン:を付け、その後に書式指定子を記述します。

C#
using System;

public class Program
{
    public static void Main()
    {
        int count = 123;
        
        // 文字列の中で直接書式を指定する
        string message = $"現在のカウントは {count:D4} です。";
        
        Console.WriteLine(message);
    }
}
実行結果
現在のカウントは 0123 です。

ToStringを個別に呼び出す必要がないため、複数の変数を組み合わせて複雑な文字列を作成する際に、コードが非常にスッキリとまとまります。

String.Formatメソッドを利用する方法

古いバージョンの.NETや、特定のテンプレート文字列を外部から読み込む場合などは、String.Formatメソッドが利用されます。

書き方のルールは文字列補間とほぼ同じですが、インデックス番号を使用します。

C#
using System;

public class Program
{
    public static void Main()
    {
        int code = 42;
        
        // {インデックス,整列:書式} の形式で記述
        string result = String.Format("Code: {0:D4}", code);
        
        Console.WriteLine(result);
    }
}
実行結果
Code: 0042

この方法は、ログ出力や複合的な文字列生成において今でも広く使われています。

PadLeftメソッドによる文字列操作としての0埋め

これまでの方法は「数値を書式化して0埋めする」ものでしたが、string型のPadLeftメソッドを使用すると、「文字列を指定した長さまで特定の文字で埋める」という操作が可能です。

文字列を対象としたパディング

数値以外の文字列に対しても適用できるのがメリットですが、数値を扱う場合は一度文字列に変換する必要があります。

C#
using System;

public class Program
{
    public static void Main()
    {
        string rawCode = "77";
        
        // 第1引数に全体の長さ、第2引数に埋める文字を指定
        string padded = rawCode.PadLeft(4, '0');
        
        Console.WriteLine(padded);
    }
}
実行結果
0077

数値型の負の値を扱う場合には注意が必要です。

たとえば、-5ToString().PadLeft(4, '0')とすると、00-5という不自然な結果になってしまいます。

一方、ToString("D4")であれば-0005と正しく処理されます。

各手法の使い分けまとめ

C#で4桁の0埋めを行う方法は複数ありますが、基本的には以下の基準で選択すると良いでしょう。

手法記述例主な用途・特徴
ToString(“D4”)val.ToString("D4")整数型の数値に対して最も標準的な方法。
ToString(“0000”)val.ToString("0000")小数点を含む型にも使え、柔軟性が高い。
文字列補間$"{val:D4}"モダンなC#開発における推奨スタイル。 可読性が高い。
String.FormatString.Format("{0:D4}", val)テンプレート化された文字列処理に適している。
PadLeftstr.PadLeft(4, '0')元が文字列の場合や、数値以外の文字で埋めたい場合に便利。

応用編:負の数や特殊なケースの挙動

実務では、単なる正の整数だけでなく、負の数や非常に大きな数値の扱いについても考慮する必要があります。

負の数の0埋め

D4指定子を使用した場合、マイナス記号は桁数に含まれません。

そのため、結果の文字列長は記号を含めて5文字になります。

C#
int negative = -1;
Console.WriteLine(negative.ToString("D4")); // 出力: -0001

もし、符号を含めて4文字にしたい、あるいは符号を考慮した独自の整形が必要な場合は、条件分岐(三項演算子など)を組み合わせる必要があります。

大規模なデータ処理でのパフォーマンス

もし数百万回といったループの中で0埋めを行う場合、文字列の生成コストが無視できなくなることがあります。

最新の.NET(.NET 6/7/8/9以降)では、Span<char>ISpanFormattableインターフェースを活用することで、メモリ割り当てを抑えた高速な書式化も可能です。

C#
// 高パフォーマンスが求められるスタック上の処理例
Span<char> buffer = stackalloc char[4];
12.TryFormat(buffer, out int charsWritten, "D4");

一般的なアプリケーション開発ではここまでの最適化は不要ですが、パフォーマンスがボトルネックになる場面では、こうした低レベルなAPIが用意されていることを知っておくと役立ちます。

まとめ

C#で4桁の0埋めを実現する方法は非常に多彩ですが、現代的な開発においては文字列補間 $"{value:D4}"を使用するのが最も効率的で読みやすい選択となります。

  • 整数なら D4
  • 浮動小数点数や汎用性を求めるなら 0000
  • 文字列操作として行うなら PadLeft

それぞれの特性を理解し、用途に合わせて適切な手法を選べるようになりましょう。

特に、負の数の扱いについては意図しない表示にならないよう、事前に仕様を確認しておくことが大切です。