数値書式文字列について

前回のセクションで文字列プレースホルダーの2つの記述手法を学びました。実はこの2種類以外にも、C#にはより複雑な書式設定ルールに対応した記法が用意されています。

基本的な書式プレースホルダー文法

{インデックス,配置指定:書式指定子}
1、index(インデックス)

インデックス / 文字列補間変数、必須項目

従来の数値インデックス型プレースホルダー:Console.WriteLine(“{0}”, 123); と記述すると、{0}の箇所に123の値が挿入されます

文字列補間構文 $"":数値によるインデックスが不要で変数名を直接記載可能。例:Console.WriteLine($”Tom is {age} years old”)

実装サンプル

int money = 1000;
Console.WriteLine("元の値:{0}", money);
Console.WriteLine("通貨書式:{0:C}", money);
Console.WriteLine("10文字幅右寄せ通貨:|{0,10:C}|", money);Code language: JavaScript (javascript)
元の値:1000
通貨書式:$1,000.00
10文字幅右寄せ通貨:| $1,000.00|

文字列補間による同等記述

int money = 500;
Console.WriteLine($"元の値:{money}");
Console.WriteLine($"通貨書式:{money:C}");
Console.WriteLine($"10文字幅右寄せ通貨:|{money,10:C}|");Code language: JavaScript (javascript)
2、alignment(配置指定)

配置指定子、省略可能、カンマ , で区切って記述

役割:出力時の最小文字幅と左右の寄せ位置を制御する

例:Console.WriteLine(“{0,10}”, 123); // 合計10文字分の幅を確保し、数値は右寄せで表示

出力結果を確認すると123の左側に空白が複数出力されています。ここの10は全体で10文字幅を確保するという意味で、123の左に7文字分の空白が補完され右寄せになる仕組みです。

正の数:右寄せ、幅が足りない場合左側に空白を補完 例:{0,10} → 10文字幅、数値右寄せ

負の数:左寄せ、幅が足りない場合右側に空白を補完 例:{0,-10} → 10文字幅、数値左寄せ

記述を変更して動作を確認します

Console.WriteLine("{0,-10}", 123);  // 10文字幅を占有、負数指定のため数値が左寄せになるCode language: JavaScript (javascript)

空白の有無が視認しにくいため、前後に縦線を追加して区別します

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: JavaScript (javascript)

前後を縦線で囲むことで動作が一目で分かります。10は固定の10文字幅を意味し、負数が左寄せ、正数が右寄せ、不足した文字分は空白で埋められます。

文字列補間を使用した同等のコードは下記の通りです

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: JavaScript (javascript)
3、format(書式指定子)

書式フィールド、省略可能、コロン : で前半要素と区切る

数値の表示形式を制御:通貨、固定小数、指数表記、16進数など

書式フィールドの構文 :Axx

  • : プレースホルダーと空白なしで連結する必要があります
  • A:1文字の書式識別子(標準で9種類実装、一部大文字小文字で動作が異なる)
  • xx:精度指定子(省略可、1~2桁の数値。意味は書式文字によって変化)
// F4:固定小数形式、小数4桁まで表示
Console.WriteLine("{0:F4}", 12.345678);

// 文字列補間による同等記述
Console.WriteLine($"{12.345678:F4}");Code language: JavaScript (javascript)

続けて実装例を確認します

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- 汎用書式", myDouble);      // 12.345678 -- 汎用書式
Console.WriteLine("{0,-10} -- 既定書式", myDouble);         // 12.345678 -- 既定書式
Console.WriteLine("{0,-10:F4} -- 固定小数", myDouble);   // 12.3457  -- 固定小数
Console.WriteLine("{0,-10:C} -- 通貨", myDouble);     // $12.35    -- 通貨
Console.WriteLine("{0,-10:E3} -- 指数表記", myDouble);//1.235E+001 -- 指数表記
Console.WriteLine("{0,-10:x} -- 16進整数", 1194719);   // 123adf    -- 16進整数Code language: JavaScript (javascript)

9種類の標準数値書式指定子 対照表

識別子正式名称機能精度指定の意味出力例
C/cCurrency 通貨ロケール対応の通貨記号を付加して表示小数桁数{0:C} 12.5 → $12.50
D/dDecimal 10進整数int型専用、桁数不足時先頭に0を補完最低表示桁数{0:D4} 12 → 0012
F/fFixed-point 固定小数小数桁数を固定して表示保持する小数桁数{0:F4} 12.345678 →12.3457
G/gGeneral 汎用書式固定小数/指数表記を自動切替、標準の既定書式有効数字桁数{0:G4} 12.345678 →12.35
X/xHexadecimal 16進数(大小文字区別)16進数出力、Xは大文字/xは小文字最低表示桁数{0:x} 180026 → 2bf3a
N/nNumber 桁区切り数値3桁ごとに区切り記号を挿入小数桁数{0:N2} 12345678.54321 →12,345,678.54
P/pPercent パーセント数値×100後に%記号を付加小数桁数{0:P2} 0.1221897 →12.22 %
R/rRound-trip 完全復元書式書式化後、精度損失なく元の数値に復元可能精度指定は無視{0:R} 1234.21897 →1234.21897
E/eScientific 指数表記(大小文字区別)指数形式で出力、E大文字/e小文字仮数部の小数桁数{0:e4}12.3456789 →1.2346e+001

数値書式文字列について

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です