数値から文字列への変換
C#でint、double、decimalなどの数値型データを、ログファイルに出力したり、画面のUIに表示したり、ファイルに書き込んだりする場合、それらの数値をstring(文字列)型に変換する必要があります。
C#では、すべての型(object)がToString()メソッドを標準で備えており、これが数値から文字列への変換を行う最も基本的かつ強力な方法です。
この記事では、単純なToString()の使用法から、桁区切りや小数点以下の桁数を制御する「書式指定」までを解説します。
ToString() の基本的な使い方
数値型の変数(int, doubleなど)で.ToString()メソッドを呼び出すだけで、その値を表現する文字列が返されます。
using System;
public class BasicToStringExample
{
public static void Main()
{
// int(整数)の場合
int userCount = 1500;
string countString = userCount.ToString();
Console.WriteLine($"元の値 (int): {userCount}");
Console.WriteLine($"文字列 (string): {countString}");
// double(浮動小数点数)の場合
double averageScore = 85.75;
string scoreString = averageScore.ToString();
Console.WriteLine($"---");
Console.WriteLine($"元の値 (double): {averageScore}");
Console.WriteLine($"文字列 (string): {scoreString}");
}
}
出力結果:
元の値 (int): 1500
文字列 (string): 1500
---
元の値 (double): 85.75
文字列 (string): 85.75
書式指定文字列によるフォーマット
ToString()メソッドの真価は、引数に「書式指定文字列(Format String)」を渡すことで、出力される文字列の形式を細かく制御できる点にあります。
これにより、通貨記号の追加、3桁ごとのカンマ区切り、小数点以下の桁数の固定、0埋めなどが可能になります。
主要な標準数値書式指定子
以下は、ToString()で頻繁に使用される主な書式指定子です。
| 指定子 | 名称 | 説明 |
C | 通貨 (Currency) | ¥1,234,500 のように、地域の通貨記号と桁区切りを付与します。(C0で小数点以下0桁) |
N | 数値 (Number) | 1,234,500.67 のように、3桁ごとの桁区切りを付与します。(N2で小数点以下2桁) |
D | 10進数 (Decimal) | 整数を10進数で表現します。桁数を指定すると0で埋められます。(D5 -> 00123) |
F | 固定小数点 (Fixed-point) | 小数点以下の桁数を固定します。デフォルトは2桁。(F3 -> 12.345) |
P | パーセント (Percent) | 値を100倍し、パーセント記号(%)を付与します。(P1で小数点以下1桁) |
X | 16進数 (Hexadecimal) | 整数を16進数(0~F)で表現します。(X4で4桁0埋め) |
書式指定のコード例
これらの書式指定子をToString()メソッドの引数として使用します。
using System;
using System.Globalization;
public class FormatToStringExample
{
public static void Main()
{
// 日本のカルチャ(通貨記号'¥'やカンマ','のため)に設定
CultureInfo.CurrentCulture = new CultureInfo("ja-JP");
decimal price = 1500000m;
int transactionId = 45;
double completionRate = 0.8525;
// C (通貨): 通貨記号とカンマ区切り
Console.WriteLine($"通貨 (C): {price.ToString("C0")}"); // C0 = 小数点以下0桁
// N (数値): カンマ区切りと小数点以下2桁
Console.WriteLine($"数値 (N): {price.ToString("N2")}");
// D (10進数): 8桁になるよう 0 埋め
Console.WriteLine($"0埋め (D): {transactionId.ToString("D8")}");
// F (固定小数点): 小数点以下3桁
Console.WriteLine($"固定小数点 (F): {completionRate.ToString("F3")}");
// P (パーセント): 値を100倍し、小数点以下1桁
Console.WriteLine($"パーセント (P): {completionRate.ToString("P1")}");
// X (16進数): 16進数に変換
Console.WriteLine($"16進数 (X): {transactionId.ToString("X")}");
}
}
出力結果:
通貨 (C): ¥1,500,000
数値 (N): 1,500,000.00
0埋め (D): 00000045
固定小数点 (F): 0.853
パーセント (P): 85.3%
16進数 (X): 2D
補足:文字列補間での利用
これらの書式指定子は、C#の文字列補間($を付けた文字列)の中でも、:(コロン)に続けて直接記述できます。この方法がToString()を明示的に呼び出すよりも簡潔です。
decimal price = 1500000m;
// ToString("C0") と同じ
string formatted = $"価格: {price:C0}";
Console.WriteLine(formatted); // 価格: ¥1,500,000
まとめ
ToString()メソッドは、数値を文字列に変換するC#の基本的な機能です。そのまま使用すると標準的な文字列が得られますが、"C"や"N2"、"D8"といった書式指定文字列を引数として渡すことで、カンマ区切り、通貨記号、0埋め、小数点以下の桁数指定など、要件に応じた柔軟な文字列整形が可能になります。
