ホーム | お問合せ

Programing

 Win32 API with C
 C#メモ
 GBA
 アルゴリズム
 雑記

.NET Framework の数値書式指定文字列

1. 標準数値書式指定文字列

 C# で (というより、.NET Framework 開発において)、 C の sprintf() のような書式付文字列を生成するには、 「標準書式指定文字列」(正確には「標準の数値書式指定文字列」) を使う。
 標準書式指定文字列は以下のような書式になっている:

xx │ └ 精度指定子 … 0〜99の値。小数部の有効桁数または0の数を制御する └-─ 書式指定子 … アルファベット1文字。書式を指定する

 精度指定子は省略可能である。 書式指定子の後に数字以外が続いたときは、 「カスタム書式指定文字列」 として解釈される。

標準数値書式指定文字列
書式指定子 名前 説明と書式例
C 通貨 国別の通貨記号や小数桁等が挿入される
 [例]
 int i = 12345;
 // 日本国(JP)の日本語(ja)の通貨書式指定情報を生成
 CultureInfo jp = new CultureInfo( "ja-JP" );
 Console.WriteLine( i.ToString("C2",jp) ); // \12,345.00
 // アメリカの(US)の英語(en)の通貨書式指定情報を生成
 CultureInfo us = new CultureInfo( "en-US" );
 Console.WriteLine( i.ToString("C0",us) ); // $12,345
D 10 進数 10進数の整数
 [例]
 int i = 12345;
 Console.WriteLine( i.ToString("D") ); // 12345
 Console.WriteLine( i.ToString("D7") ); // 0012345
E または e 指数 指数表現
 [例]
 double f = 123.45;
 Console.WriteLine( f.ToString("E") ) ; // 1.234500E+002
 Console.WriteLine( f.ToString("e7") ) ; // 1.2345000e+002
F 固定小数点 小数
 [例]
 double f = 123.45;
 Console.WriteLine( f.ToString("F") ) ; // 123.45
 Console.WriteLine( f.ToString("F7") ) ; // 123.4500000
G または g 一般 数値の型や小数の指数部の大きさ等に応じて、生成される文字列が変化する。 G と g の違いは、指数表現で文字列が生成される際に、 指数部を表すプリフィクス E を大文字にするか、 小文字にするかの違いだけである。 printf() にも同じのがあったけどあまり使わないと思うので省略
N 数値 整数部に 3 桁ごとの区切りを入れる
 [例]
 int i = 12345;
 Console.WriteLine( i.ToString("N") ); // 12,345.00
 Console.WriteLine( i.ToString("N0") ); // 12,345
 Console.WriteLine( i.ToString("N7") ); // 12,345.0000000
P パーセント 小数値を 100 倍して末尾に % 記号を付ける
 [例]
 double f = 0.12345;
 Console.WriteLine( f.ToString("p") ) ; // 12.35%
 Console.WriteLine( f.ToString("p7") ) ; // 12.3450000%
R ラウンドトリップ 浮動小数点型のみ。数値の変換後の文字列が、 変換前の数値へ戻るように解析されることを指定する (意味がわからん)。精度指定子は無視される
 [例]
 double f = 123.45;
 Console.WriteLine( f.ToString("R") ) ; // 123.45
 Console.WriteLine( f.ToString("R7") ) ; // 123.45
おそらく特殊な数値計算用だろう。
X または x 16 進数 16 進数の整数。16 進数値を表すアルファベット文字は、 X を指定すると大文字で、x を指定すると小文字になる
 [例]
 int i = 43981;
 Console.WriteLine( i.ToString("X") ) ; // ABCD
 Console.WriteLine( i.ToString("x8") ) ; // 0000abcd

 これらの書式指定子によって生成される文字列は、 コンパネの [地域のオプション] の設定の影響を受ける。 つまり PC の設定環境によっては違うように見えてしまうことがある、 ということだ。
 NumberFormatInfo によって国別の数値表現を制御できるらしいが、 海外向けソフトを作るわけでは無いので省略した。
 また、いくつかの書式は特定のプロパティによって変更することもできる。 詳しくは msdn ライブラリのヘルプ(別ウィンドウ)を見よ。



2. カスタム数値書式指定文字列

 標準の数値書式指定子では必要な書式設定効果を実現できない場合には、 カスタム書式指定文字列を使用することにより文字列出力を拡張できる。

カスタム数値書式指定文字列
書式指定文字 名前と使用例
0 ゼロ プレースホルダ
 int i = 12345;
 Console.WriteLine( i.ToString("00000000") ); // 00012345
 Console.WriteLine( i.ToString("000") ); // 12345
# 桁プレースホルダ
 int i = 12345;
 Console.WriteLine( i.ToString("########") ); // 12345
 Console.WriteLine( i.ToString("###") ); // 12345
 i = 1234567890;
 Console.WriteLine( i.ToString("(###)###-####") ); // (123)456-7890
 Console.WriteLine( i.ToString("[000]-[####]-[####]") ); // [012]-[3456]-[7890]
. 小数点
 double f = 123.45;
 int i = 12345;
 Console.WriteLine( f.ToString("00000.0") ); // 00123.5
 Console.WriteLine( i.ToString("0.00000") ); // 12345.00000
 Console.WriteLine( f.ToString("#####.#") ); // 123.5
 Console.WriteLine( f.ToString("#.#####") ); // 123.45
 Console.WriteLine( i.ToString("#.#####") ); // 12345
, 桁区切り記号
 int i = 1234567890;
 /* 3 桁ごとに区切りを入れる */
 Console.WriteLine( i.ToString("#,#") ); // 1,234,567,890
 /* ↑と同じ結果になる (記述ミスであり、意味が無い) */
 Console.WriteLine( i.ToString("#,,#") ); // 1,234,567,890
値の位取り
 /* 数値を右へ3シフトし、小数第1位を四捨五入 */
 Console.WriteLine( i.ToString("#,") ); // 1234568
 /* 数値を右へ6シフトし、小数第1位を四捨五入 */
 Console.WriteLine( i.ToString("#,,") ); // 1235
[桁区切り記号と値の位取りの組み合わせ]
 /* "#,#"+"#," */
 Console.WriteLine( i.ToString("#,##,") ); // 1,234,568
 /* "0,0.000"+"#,," (右へ6シフトし、小数第4位を四捨五入) */
 double f = 1234567890.12345;
 Console.WriteLine( f.ToString("0,0#,,.000") ); // 1,234.568
% パーセント プレースホルダ
 double f = 0.3094420;
 Console.WriteLine( f.ToString("0.##%") ); // 30.94%
E0
E+0
E-0
e0
e+0
e-0
指数表記
 double f = 3141.592654;
 Console.WriteLine( f.ToString("0.###E+0") ); // 3.142E+3
 Console.WriteLine( f.ToString("##.###E+000") ); // 31.416E+002
 Console.WriteLine( f.ToString("######.#e-00") ); // 314159.3e-02
\ エスケープ文字
 Console.Write( "\n" ); // 改行
その他 \t\r 等、C のエスケープ文字と一緒。 Visual Basic ではサポートされていないらしい。 そのかわり、ControlChars がエスケープ文字として提供されている
'A'
"ABC"
リテラル文字(列)
 Console.WriteLine( 'A' ); // A
 Console.WriteLine( "'ABC'" ); // 'ABC'
 Console.WriteLine( "\'ABC\'" ); // 'ABC'
 Console.WriteLine( "ABC" ); // ABC
; セクション区切り記号
 int i = 123;
 Console.WriteLine( i.ToString("+###;−###") ); // +123
 i = -123;
 Console.WriteLine( i.ToString("+###;−###") ); // −123
 Console.WriteLine( i.ToString("0以上;0未満") ); // 0未満
 i = 0;
 Console.WriteLine( i.ToString("正;負;0") ); // 0
最大3セクションまで

 使用例はコンパネの [地域のオプション] に日本国が設定されている場合の例である。 詳しくは msdn ライブラリのヘルプ(別ウィンドウ)を見よ。



ホーム | 掲示板 | お問合せ | リンク
Copyright © 2004-2006 Spiegel im Spiegel, All Rights Reserved.