書式設定の方法はいろいろあります。
書式指定文字列のなかの{}を利用する方法はすでに出てきているので、これについて解説します。
Console.WriteLie("{0,10}", 引数,...);上の構文において、{}を書式指定項目といいます。これは、詳しく見ると
{index[,alignment][:formatString]}indexは当然省略不可です。パラメータ指定子といいます。
alignmentは、省略可です。書式設定フィールドの幅を指定する符号付き整数値です。 プラスは左揃え、マイナスは右揃えになります。
formatString は、省略可能で書式指定文字列といいます。これには、Xnnで表され、Xを書式指定子(アルファベット)、nnは精度指定子(数字)といいます。 nnは省略可能です。
標準書式指定文字 | 意味 |
Cまたはc | 通過を表す文字列に変換。精度指定子は、小数点以下の桁数 |
Dまたはd | 整数型のみ。整数の左側に精度指定子で指定した桁に達するまで0で埋められる |
Eまたはe | 1.2555E+128(または1.2555e+128)形式に変換。精度指定子は小数点以下の桁数。指数部は常に符号付き3桁。 |
Fまたはf | 固定小数点数を表す文字列に変換。精度指定子は小数点以下の桁数。 |
Gまたはg | 固定小数点または指数表記のうち簡潔な方を表示。精度指定子は、変換後の文字列の有効桁数。 |
Nまたはn | 整数部は3桁ごとに区切り記号がはいる。精度指定子は小数部の桁数。 |
Pまたはp | パーセント値に変換。精度指定子は小数部の桁数。 |
Rまたはr | 浮動小数点型のみ。返還後の文字列が変換前の数値に戻るように解析される。精度指定子は無視される。 |
Xまたはx | 整数型のみ。16進表記の文字列に変換。精度指定子は変換後の最小桁数。桁数に達しないときは0を左側に追加。 |
標準書式指定指定子で、希望の書式が得られないときはカスタム書式指定文字列を使います。
書式指定文字 | 名称 | 意味 |
0 | Zero placeholder | 0に対応する位置に数字がある時は、この数字が文字列にコピーされます。ない場合は0のままです。 |
# | Digit placeholder | #の位置に対応する数字がある時は、その数字が文字列にコピーされ、ない場合は何もコピーされない。 |
. | Decimal point | 小数点の位置を指定。 |
, | 桁区切り | (1)0または#の間に(,)があれば整数部が3桁ごとに(,)がはいる (2)0または#に挟まれない文字列内の整数部に(,)が1つ以上あれば、そのたびに1000で除される |
% | Percentage placeholder | パーセント表示 |
E0,E+0,E-0 | Scientific notation | 小文字(e)も可。指数表記。0の数が指数部の最小の桁数。+があれば指数部に+または-がつく。-の時は指数部が負の時のみ−を表示。+も-もなければ指数部が負の時のみ-を表示。 |
\ | Escape character | \の後ろの文字がエスケープシーケンスとして解釈される。 |
'abc'または"abc" | リテラルとして出力文字列にコピーされる。 | |
その他 | 上記以外の文字は対応する位置にそのままコピーされる。 |
言葉で説明すると、かなり面倒なように思われますが、実際に使ってみるとたいしたことないものばかりです。
// format01.cs using System; class format01 { public static void Main() { double d = 1596.28; int i = 123; double e = 1.256E10; double f = 12.3; double g = 1234500000000.258; double p = 0.8569; double r = 12.15; int x = 255; Console.WriteLine("d = {0}", d); Console.WriteLine("d = {0:c} ---c", d); Console.WriteLine("d = {0:c4} ---c4", d); Console.WriteLine(); Console.WriteLine("i = {0}", i); Console.WriteLine("i = {0:d} ---d", i); Console.WriteLine("i = {0:d5} ---d5", i); Console.WriteLine(); Console.WriteLine("e = {0}", e); Console.WriteLine("e = {0:e2} ---e2", e); Console.WriteLine("e = {0:e5} ---e5", e); Console.WriteLine(); Console.WriteLine("f = {0}", f); Console.WriteLine("f = {0:f} ---f", f); Console.WriteLine("f = {0:f5} ---f5", f); Console.WriteLine(); Console.WriteLine("g = {0}", g); Console.WriteLine("g = {0:g} ---g", g); Console.WriteLine("g = {0:g7} ---g7", g); Console.WriteLine(); Console.WriteLine("p = {0}", p); Console.WriteLine("p = {0:p2} ---p2", p); Console.WriteLine("p = {0:p4} ---p4", p); Console.WriteLine(); Console.WriteLine("r = {0}", r); Console.WriteLine("r = {0:r} ---r", r); Console.WriteLine(); Console.WriteLine("x = {0}", x); Console.WriteLine("x = {0:x} ---x", x); Console.WriteLine("x = {0:x8} ---x8", x); } }実行結果は次の図のようになります。
書式指定子cの場合は、整数部がコンマで区切られることに注意してください。
// format02.cs using System; class format02 { public static void Main() { int i = 123; double d = 123.45; double e = 10000000000; double f = 1254700000; int g = 01125472356; Console.WriteLine("i = {0}", i); Console.WriteLine("i = {0:0000.00} ---0000.00", i); Console.WriteLine("i = {0:####.##} ---####.##", i); Console.WriteLine(); Console.WriteLine("d = {0}", d); Console.WriteLine("d = {0:.0000} ---.0000", d); Console.WriteLine("d = {0:####.#} ---####.#", d); Console.WriteLine(); Console.WriteLine("e = {0}", e); Console.WriteLine("e = {0:0,0} ---0,0", e); Console.WriteLine("e = {0:0,} ---0,", e); Console.WriteLine("e = {0:0,0,} ---0,0,", e); Console.WriteLine("e = {0:0,0,,} ---0,0,,", e); Console.WriteLine("e = {0:0,0,,,} ---0,0,,,", e); Console.WriteLine("e = {0:0,0,,,,} ---0,0,,,,", e); Console.WriteLine("e = {0:#,#} ---#,#", e); Console.WriteLine(); Console.WriteLine("f = {0}", f); Console.WriteLine("f = {0:e} ---e", f); Console.WriteLine("f = {0:0.0e+000000} ---0.0e+000000", f); Console.WriteLine(); Console.WriteLine("g = {0}", g); Console.WriteLine("g = {0:(###)####-####} ---(###)####-####", g); Console.WriteLine("g = {0:(000)0000-0000} ---(000)0000-0000", g); } }実行結果を見てみましょう。
(,)の使い方がわかりにくいと思います。(実際のプログラミングではほとんど登場しないか・・・)
Update 09/Aug/2006 By Y.Kumei