【C#】ToString() の書式指定子で文字列をカスタマイズする

【C#】ToString() の書式指定子で文字列をカスタマイズする

はじめに

C# の ToString メソッドを使うと、変数やオブジェクトを文字列に変換できます。

例えば以下のように int 型の数値を string 型に変換できます。

int num = 123;
string numStr = num.ToString();

ToString メソッドでは引数に「書式指定子」を指定できます。これを活用することで変換時に文字列をカスタマイズできます。

本記事では ToString メソッドで使える書式指定子をいくつか紹介します。

数値を3桁コンマ区切りにする

N” は 数値書式指定子 と呼ばれ、ToString("N0")とすることで整数値が3桁のコンマ区切り文字列に変換されます。string.Formatを使った変換も可能です。

int num = 1234;
Debug.Log(num.ToString("N0"));// => 1,234

// string.Format を使う方法
Debug.Log(string.Format("{0:#,0}", num));// => 1,234

参考 数値書式指定子 (N)Microsoft ドキュメント

小数点以下の桁数を指定する

F” は 固定小数点書式指定子 と呼ばれ、小数点以下の桁数を指定できます。

F の右横で指定できる数値は「精度指定子」と呼ばれ、この数値が小数部の桁数を表します。例えば ToString("F2") とすると小数部の桁数は2桁になります。その際溢れた部分の少数値は四捨五入されます。

float num = 123.456f;
Debug.Log(num.ToString("F"));// => 123.46
Debug.Log(num.ToString("F3"));// => 123.456
Debug.Log(num.ToString("F4"));// => 123.4560

精度指定子を省略して ToString("F")と表記することも可能です。その場合はデフォルトで小数部の桁数が2桁になります。またNumberFormatInfo.CurrencyDecimalDigits プロパティからデフォルトの桁数を変更できます。

参考 固定小数点書式指定子 (F)Microsoft ドキュメント

金額を表す文字列に変換する

C” は 通貨書式指定子と呼ばれ、数値を金額を表す文字列に変換します。 そのため、変換後は文字列に円 (¥) やドル ($) の通貨記号が追加されます。精度指定子は小数部の桁数を表します。

CultureInfo.CurrentCultureで現在設定中のカルチャ情報が取得できます。日本語設定の場合は "ja-JP" で、英語設定の場合は "en-US" となります。

// 現在設定中のカルチャ情報を取得
Debug.Log(CultureInfo.CurrentCulture);// => en-US

int num = 7000;
Debug.Log(num.ToString("C"));// => $7,000.00
Debug.Log(num.ToString("C3"));// => $7,000.000

// 通貨を日本に設定
var japanInfo = new CultureInfo("ja-JP");
Debug.Log(num.ToString("C", japanInfo)); // => ¥7,000

参考 通貨書式指定子 (C)Microsoft ドキュメント

日付や時刻表示の文字列に変換する

System.DateTime.Now で取得した日付や時刻の情報を様々な文字列形式に変換できます。

// カルチャ情報を日本に設定
CultureInfo.CurrentCulture = new CultureInfo("ja-JP");

System.DateTime time = System.DateTime.Now;
Debug.Log(time.ToString("D"));// => 2021年4月20日
Debug.Log(time.ToString("d"));// => 2021/04/20
Debug.Log(time.ToString("T"));// => 22:09:52
Debug.Log(time.ToString("t"));// => 22:09
Debug.Log(time.ToString("F"));// => 2021年4月20日 22:09:52
Debug.Log(time.ToString("u"));// => 2021-04-20 22:09:52Z
Debug.Log(time.ToString("G"));// => 2021/04/20 22:09:52

パーセント (%) 表記に変換する

P” は パーセント書式指定子 と呼ばれ、数値に 100 を掛けてパーセントを表す文字列に変換します。 精度指定子は小数部の桁数を表します。

float num = 0.7428f;
Debug.Log(num.ToString("P"));// => 74.28 %
Debug.Log(num.ToString("P1"));// => 74.3 %

参考 パーセント書式指定子 (P)Microsoft ドキュメント

指定した桁数になるまで 0 埋めする

D” は 10 進数書式指定子 と呼ばれ、精度指定子で指定した桁数になるまで数値の左側を 0 埋めします。

int num = 777;
Debug.Log(num.ToString("D"));// => 777
Debug.Log(num.ToString("D5"));// => 00777

参考 10 進数書式指定子 (D)Microsoft ドキュメント

数値を 10 進数から 16 進数に変換する

X” は 16 進書式指定子 と呼ばれ、数値を 16 進数文字列に変換します。

小文字の “x” と指定すれば、16進数の変換時にアルファベット文字が小文字になります。

Debug.Log(1.ToString("X"));// => 1
Debug.Log(10.ToString("X"));// => A
Debug.Log(10.ToString("x"));// => a
Debug.Log(30.ToString("X"));// => 1E
Debug.Log(16.ToString("X8"));// => 00000010

参考 16 進書式指定子 (X)Microsoft ドキュメント

参考資料

関連記事

C#でstring 型の文字列を連結させる6つの方法 【 C# 】文字列を連結させる6つの方法【StringBuilder, Joinなど】 C#で文字列を分割して配列やリストにする方法 【C#】文字列を分割して配列やリストにする方法【String.Split】