九九表の表示
以下のコードは、九九表をコンソールに出力します。
int multiplier, multiplicand;
string outputString;
for (multiplier = 1; multiplier <= 9; multiplier++)
{
for (multiplicand = 1; multiplicand <= multiplier; multiplicand++)
{
// {0}x{1}={2,-2} は、乗数x被乗数=積 の形式で、積を2桁で左寄せ表示します。
outputString = string.Format("{0}x{1}={2,-2} ", multiplicand, multiplier, multiplicand * multiplier);
Console.Write(outputString);
}
Console.WriteLine();
}
上記のコードの7行目、string.Format("{0}x{1}={2,-2} ", multiplicand, multiplier, multiplicand * multiplier); では、{2,-2} という書式指定子が使用されています。これは、3番目の引数 (乗算結果) を2桁の幅で左揃えにして表示することを意味します。
書式指定子の変更による影響
もし、この書式指定子を {2,2} に変更した場合、結果は右揃えになります。
// {2,2} は、積を2桁で右寄せ表示します。
outputString = string.Format("{0}x{1}={2,2} ", multiplicand, multiplier, multiplicand * multiplier);
Console.Write(outputString);
この変更による出力結果の違いを確認してください。
数値の書式変換
数値データ型を文字列に変換する際に、ToString() メソッドや string.Format() メソッドで様々な書式を指定できます。
小数点以下の扱い
以下の例では、浮動小数点数と整数での ToString("#.#") の挙動の違いを示します。
// 浮動小数点数としての除算結果 (100.0で割る)
string floatResult = (56789 / 100.0).ToString("#.#");
// 整数としての除算結果 (100で割る)
string intResult = (56789 / 100).ToString("#.#");
Console.WriteLine($"floatResult={floatResult}, intResult={intResult}.");
(56789 / 100.0).ToString("#.#"): 浮動小数点数として計算され、小数点以下1桁まで表示されます。結果は "567.9" となります。(56789 / 100).ToString("#.#"): 整数として計算されるため、小数点以下は切り捨てられます。結果は "567" となります。書式指定子で小数点以下を表示するように指定しても、元の整数に小数点以下の情報がないため、表示されません。
String.Format() による書式指定の例
String.Format() を使用すると、数値に対してより詳細な書式設定が可能です。
// N1: 数値形式、小数点以下1桁(桁区切りあり)
string str1 = string.Format("{0:N1}", 56789); // 結果: "56,789.0"
// N2: 数値形式、小数点以下2桁(桁区切りあり)
string str2 = string.Format("{0:N2}", 56789); // 結果: "56,789.00"
// N3: 数値形式、小数点以下3桁(桁区切りあり)
string str3 = string.Format("{0:N3}", 56789); // 結果: "56,789.000"
// F1: 固定小数点形式、小数点以下1桁
string str8 = string.Format("{0:F1}", 56789); // 結果: "56789.0"
// F2: 固定小数点形式、小数点以下2桁
string str9 = string.Format("{0:F2}", 56789); // 結果: "56789.00"
// "#.##" 書式指定子 (ToStringメソッドで使用)
// 浮動小数点数として計算
string str11 = (56789 / 100.0).ToString("#.##"); // 結果: "567.89"
// 整数として計算
string str12 = (56789 / 100).ToString("#.##"); // 結果: "567"
// C: 通貨形式
Console.Write("{0:C}", 2.5); // 結果例: "$2.50" (ロケールに依存)
Console.Write("{0:C}", -2.5); // 結果例: "($2.50)"
// D: 10進数形式 (ゼロ埋め)
Console.Write("{0:D5}", 25); // 結果: "00025"
// E: 指数表記(科学表記)
Console.Write("{0:E}", 250000); // 結果: "2.500000E+005"
// F: 固定小数点形式
Console.Write("{0:F2}", 25); // 結果: "25.00"
Console.Write("{0:F0}", 25); // 結果: "25"
// G: 一般形式 (数値または指数表記、精度が高い方)
Console.Write("{0:G}", 2.5); // 結果: "2.5"
// N: 数値形式 (桁区切り、小数点以下2桁)
Console.Write("{0:N}", 2500000); // 結果: "2,500,000.00"
// X: 16進数形式
Console.Write("{0:X}", 250); // 結果: "FA"
これらの例は、C#における数値の文字列変換と書式設定の基本を示しています。特に、string.Format() の書式指定子は、表示形式を細かく制御するのに役立ちます。