忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

数値データを指定書式で文字列に変換する(ToString , String.Format)

数値データを表示するために各種の書式の文字列に変換することはよくあります。 各データ型が持つ ToString メソッドを使えば以下の様な感じでできます。

Console.WriteLine((12345).ToString("C"))            '¥12,345  と表示
Console.WriteLine((12345).ToString("D8"))           '00012345 と表示
Console.WriteLine((1234.567).ToString("00000.00"))  '01234.57 と表示


上の (12345) の部分は文字列 "12345"Integer型 データとして変換されます。 また (1234.567) の部分は文字列 "1234.567"Double型 データとして変換され、それぞれの ToString メソッドが呼ばれます。

ToString メソッドの引数の文字列には各種存在し、 「標準の数値書式指定文字列」と「カスタム数値書式指定文字列」の2種類があります ので、順を追って説明します。


■「標準の数値書式指定文字列」について


次の表に、標準の数値書式指定文字列の説明および書式指定子ごとのサンプル出力を示します。

書式指定子名称対象データ型結果精度指定子サンプル
"C" or
"c"
通貨型 全ての数値型 通貨値 小数部の桁数 (123.456).ToString("C") = ¥123
(-123.456).ToString("C3") = -¥123.456
"D" or
"d"
Decimal 整数型のみ 必要に応じて
負の符号が付く整数と小数
最小桁数 (1234).ToString("D") = 1234
(-1234).ToString("D6") = -001234
"E" or
"e"
指数 全ての数値型 指数表記 小数部の桁数 (123.456).ToString("E") = 1.234560E+002
(0.12345).ToString("e3") = 1.235e-001
"F" or
"f"
固定小数点 全ての数値型 必要に応じて
負の符号が付く整数と小数
小数部の桁数 (1234.567).ToString("F") = 1234.57
(1234).ToString("F1") = 1234.0
(-1234.56).ToString("F3") = -1234.560
"G" or
"g"
全般 全ての数値型 固定小数点表記or
指数表記の何れか簡潔な形式
有効桁数 (-123.456).ToString("G") = -123.456
(123.4546).ToString("G4") = 123.5
(-1.23456E-25).ToString("G") = -1.23456E-25
"P" or
"p"
パーセント 全ての数値型 数値に 100 を掛けて
%記号を付けて表示
小数部の桁数 (1).ToString("P") = 100.00 %
(-0.39678).ToString("P1") = -39.7 %
"X" or
"x"
16進数 整数型のみ 16進数文字列 結果文字列の桁数 (255).ToString("X") = FF
(-1).ToString("X") = FFFFFFFF
(255).ToString("x4") = 00ff
(1000).ToString("X4") = 03E8


書式指定子は上記の様にたくさんありますが、実際に使ったものとなると "C""D" ぐらいです。 指数表記は科学計算で必要になるぐらいで、私はあまり使った記憶がありません。
尚、以下のソースで簡単な例を示します。

    Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
        '「Double」型データ
        Dim dbTest As Double = 0.0
        '「Long」型データ
        Dim lngTest As Long = 0

        '標準の数値書式指定文字列「C,c」
        Console.WriteLine("標準の数値書式指定文字列「C,c」")
        dbTest = 123
        Console.WriteLine(dbTest.ToString("C"))
        dbTest = 123.56
        Console.WriteLine(dbTest.ToString("C"))
        dbTest = 123.456
        Console.WriteLine(dbTest.ToString("C2"))
        dbTest = -123.56
        Console.WriteLine(dbTest.ToString("C"))

        '標準の数値書式指定文字列「D,d」
        Console.WriteLine("標準の数値書式指定文字列「D,d」")
        lngTest = 123
        Console.WriteLine(lngTest.ToString("D"))
        Console.WriteLine(lngTest.ToString("D5"))
        lngTest = -123
        Console.WriteLine(lngTest.ToString("D6"))
    End Sub

実行結果がコンソールには以下様に表示されます。

標準の数値書式指定文字列「C,c」
\123
\124
\123.46
-\124
標準の数値書式指定文字列「D,d」
123
00123
-000123



■「カスタム数値書式指定文字列」について


次の表に、カスタム数値書式指定文字列の説明および書式指定子ごとのサンプル出力を示します。 (よく使うものをピックアップしてあります)

書式指定子名称説明サンプル
"0" ゼロ
プレース
ホルダー
対応する数字でゼロを置き換えます。
置き換えが行われるのは対応する数字が存在する場合です。
それ以外の場合は結果の文字列にはゼロが表示されます。
(1234).ToString("00000") = "01234"
(-1.23).ToString("000.000") = "-001.230"
(123.456).ToString("00.00") = "123.46"
"#"
プレース
ホルダー
対応する数字で "#" 記号を置き換えます。
置き換えが行われるのは対応する数字が存在する場合です。
それ以外の場合は結果の文字列に数字は表示されません。
(1234).ToString("00000") = "01234"
(-1.23).ToString("000.000") = "-001.230"
(123.456).ToString("00.00") = "123.46"
"." 小数点 結果の文字列の小数点位置を決定します。 (123.45).ToString("0.0") = "123.5"
(-1.2).ToString("00.00") = "-01.20"
"," 桁区切り
数値位取り
(0 または #) の間に1つ以上の "," が在る場合は
桁区切り記号が挿入。
数値位取りとしては
指定された "," ごとに数値を 1000 で除算します。
(123456).ToString("#,0") = "123,456"
(1678).ToString("0,") = "2"
(123456789).ToString("0,,") = "123"
";" セクション
区切り
正、負、ゼロの数値に対して
別々の書式指定文字列でセクションを定義します。
2セクション:
・最初のセクションが正の値とゼロに適用
・2番目のセクションが負の値に適用
3セクション:
・最初のセクションが正の値に適用
・2番目のセクションが負の値に適用
・3番目のセクションがゼロに適用
(12.345).ToString("#0.0#;(#0.0#);-\0-") = "12.35"
(0).ToString("#0.0#;(#0.0#);-\0-") = "-0-"
(-12.345).ToString("#0.0#;(#0.0#);-\0-") = "(12.35)"
"%" パーセント
プレース
ホルダー
数値に 100 を乗算し結果の文字列に
パーセント記号を挿入します。
(0.3697).ToString("%#0.00") = %36.97
'文字列' リテラル
文字列
区切り
囲まれた文字列が結果の文字列に
そのまま出力される。
(0.3697).ToString("'P:'%#0.00") = P:%36.97


尚、上記の例を以下のソースで示します。

    Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
        '「Double」型データ
        Dim dbTest As Double

        'カスタム数値書式指定文字列["0"]
        Console.WriteLine("カスタム数値書式指定文字列[""0""]")
        dbTest = 123
        Console.WriteLine(dbTest.ToString("00000"))
        dbTest = 123.456
        Console.WriteLine(dbTest.ToString("00000.00"))
        dbTest = -123.56
        Console.WriteLine(dbTest.ToString("00000.00"))

        'カスタム数値書式指定文字列["#"]
        Console.WriteLine("カスタム数値書式指定文字列[""#""]")
        dbTest = 123
        Console.WriteLine(dbTest.ToString("#####"))
        dbTest = 123.456
        Console.WriteLine(dbTest.ToString("#####.##"))
        dbTest = -123.56
        Console.WriteLine(dbTest.ToString("#####.##"))

        'カスタム数値書式指定文字列[";"]
        Console.WriteLine("カスタム数値書式指定文字列["";""]")
        dbTest = 123
        Console.WriteLine(dbTest.ToString("#####;[#####];'ZERO'"))
        dbTest = 0
        Console.WriteLine(dbTest.ToString("#####;[#####];'ZERO'"))
        dbTest = -123.56
        Console.WriteLine(dbTest.ToString("#####.##;[#####.##];'ZERO'"))

        '最後に複合的な使い方
        Console.WriteLine("最後に複合的な使い方")
        dbTest = 12345678.123
        Console.WriteLine(dbTest.ToString("'テストデータ:'#,0.00"))
    End Sub

実行結果がコンソールには以下様に表示されます。

セクション区切りを使用して1個の書式文字列で、正、負、ゼロで別々の書式が指定できますので、 数値を判断して個別に処理を分けなくてもよくなります。
カスタム数値書式指定文字列["0"]
00123
00123.46
-00123.56
カスタム数値書式指定文字列["#"]
123
123.46
-123.56
カスタム数値書式指定文字列[";"]
123
ZERO
[123.56]
最後に複合的な使い方
テストデータ:12,345,678.12



■「複合書式指定文字列」について

複合書式指定文字列とは、出力される固定文字列の中に挿入されるべきデータ用のプレースホルダーを記入したものです。 このプレースホルダーはインデックス化されていて、「0」から順に番号が振られます。
この複合書式指定文字列を引数として使えるメソッドに String.FormatConsole.WriteLine などがあります。 複合書式指定文字列の引数の後ろに、プレースホルダーに対応する出力したいデータを記述します。

この説明ではよく分からないので、以下の例を見てください。
{ } で囲まれた数字がインデックスで、対応するデータの引数の位置を示しているのが分かります。

    Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
        Dim intData As Integer = 10
        Dim lngData As Long = 1000
        Dim dblData As Double = 123.45
        Console.WriteLine("Integer:{0}, Long:{1}, Double:{2}", intData, lngData, dblData)
    End Sub

実行結果がコンソールには以下様に表示されます。

Integer:10, Long:1000, Double:123.45

尚、プレースホルダーの書式は以下の様になっています。

<プレースホルダー書式>
{ index [,alignment] [:formatString] }

・index:パラメーター指定子とも呼ばれ、
         オブジェクトのリスト内で対応する項目を識別するための 0 から始まる数値です。 
・[,alignment]:書式設定フィールドの幅を指定する符号付き整数です。
         フィールド内の書式設定されたデータは、alignment が正の場合は右揃え、
         alignment が負の場合は左揃えされます。 埋め込みが必要な場合は、空白が使用されます。

・[:formatString]:書式設定されるオブジェクトの種類に適した書式指定文字列です。
        「標準の数値書式指定文字列」「カスタム数値形式文字列」が指定できます。


プレースホルダーの書式にいろいろ付け加えて、上記のソースを以下の様にしました。

    Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
        Dim intData As Integer = 10
        Dim lngData As Long = 1000
        Dim dblData As Double = 123.45
        Console.WriteLine("Integer:{0,7:0.00}, Long:{1,-6:#,0}, Double:{2,10:###0.000}", _
                          intData, lngData, dblData)
    End Sub

実行結果がコンソールには以下様に表示されます。

Integer:  10.00, Long:1,000 , Double:   123.450

関連する記事

指定した精度の桁数に数値を切り上げ    :[Math.Ceiling,Math.Floor]
文字列から数値型への変換(parse - tryparse)
オブジェクト型から数値型への変換(TryParse)











PR

コメント

コメントを書く