自訂數值格式字串簡述

 

由於標準數值格式字串未必符合開發者需求,所以C#也提供了自訂數值格式字串供開發者選用。

 

一、零值預留位置 "0"

using System;

public class Example
{
    public static void Main()
    {
        int a = 1234;
        Console.WriteLine(a.ToString("000"));
        Console.WriteLine(a.ToString("00000"));
        Console.WriteLine(a.ToString("00.00"));

        Console.ReadKey();
    }
}

執行結果

說明:

以對應的數字 (如果有的話) 取代零,否則結果字串中會出現零。

 

二、數字預留位置 "#"

using System;

public class Example
{
    public static void Main()
    {
        int a = 1234;
        Console.WriteLine(a.ToString("###"));
        Console.WriteLine(a.ToString("#####"));
        Console.WriteLine(a.ToString("##.##"));

        Console.ReadKey();
    }
}

執行結果

說明:

不重要的零都會被拿掉。

 

三、小數點 "."

using System;

public class Example
{
    public static void Main()
    {
        int a = 1234;
        Console.WriteLine(a.ToString("000"));
        Console.WriteLine(a.ToString("0.0000"));
        Console.WriteLine(a.ToString("00.00"));

        Console.ReadKey();
    }
}

執行結果

說明:

決定小數點的位置。其用法早就跟第一項「零值預留位置 "0"」融入一起使用了。

 

四、群組分隔符號和數值範圍 ","

using System;

public class Example
{
    public static void Main()
    {
        int a = 1234;
        Console.WriteLine(a.ToString("0000"));
        Console.WriteLine(a.ToString("0000,000"));
        Console.WriteLine();

        int b = 12345678;
        Console.WriteLine(b.ToString("0,0"));
        Console.WriteLine(b.ToString("0,,"));

        Console.ReadKey();
    }
}

執行結果

說明:

1、其功能有兩個,分別為群組分隔符號與數值縮放。

2、群組分隔符號,如果在用於格式化數字整數位數的兩個數字預留位置 (0 或 #) 之間指定一個或多個逗號,

則會在輸出的整數部分中在每個數字群組之間插入群組分隔符號字元。

3、數值縮放,如果在明確或隱含小數點的右側緊接著指定一個或多個逗號,

則每指定一個逗號就會將要格式化的數字除以 1000。

 

五、百分比預留位置 "%"

using System;

public class Example
{
    public static void Main()
    {
        double a = 1234.5678;
        Console.WriteLine(a.ToString("0%"));
        Console.WriteLine(a.ToString("00.000%"));

        Console.ReadKey();
    }
}

執行結果

說明:

以百分比方式顯示。

 

六、千分之一符號預留位置 "‰"

using System;

public class Example
{
    public static void Main()
    {
        double a = 1234.5678;
        Console.WriteLine(a.ToString("0\u2030"));
        Console.WriteLine(a.ToString("00.000‰"));

        Console.ReadKey();
    }
}

執行結果

說明:

以千分比方式顯示。由於command line的編碼是big5,

所以顯示不出特殊字元,改使用監看式來看吧。

 

七、指數標記法 "E" or "e"

using System;

public class Example
{
    public static void Main()
    {
        double a = 1234.5678;
        Console.WriteLine(a.ToString("0E+0"));
        Console.WriteLine(a.ToString("0E+00"));
        Console.WriteLine(a.ToString("0E+000"));
        Console.WriteLine();

        double b = 12345678901.2;
        Console.WriteLine(b.ToString("0E+0"));
        Console.WriteLine(b.ToString("0E+00"));
        Console.WriteLine(b.ToString("0E+000"));
        Console.WriteLine();

        Console.WriteLine(a.ToString("00E+0"));
        Console.WriteLine(a.ToString("000E+00"));
        Console.WriteLine(a.ToString("0000E000"));
        Console.WriteLine(a.ToString("0000E-000"));
        Console.WriteLine(a.ToString("00000E+000"));
        Console.WriteLine();

        Console.WriteLine(a.ToString("00000E+000"));
        Console.WriteLine(a.ToString("00000E000"));
        Console.WriteLine(a.ToString("00000E-000"));
        Console.WriteLine();

        Console.WriteLine(a.ToString("0000E+000"));
        Console.WriteLine(a.ToString("0000E000"));
        Console.WriteLine(a.ToString("0000E-000"));
        Console.WriteLine();

        Console.WriteLine(a.ToString("000E+000"));
        Console.WriteLine(a.ToString("000E000"));
        Console.WriteLine(a.ToString("000E-000"));
        Console.WriteLine();

        Console.WriteLine(a.ToString("00000E000"));
        Console.WriteLine(a.ToString("00000e-000"));
        Console.WriteLine(a.ToString("00000e000"));
        Console.ReadKey();
    }
}

執行結果

說明:

1、將一數值用指數來表示,使用大寫的E表示使用大寫E來做指數表示,而小寫e則指數小寫e表示。

2、格式規範"E"的左邊用來表示要顯示的n位整數位數。

3、格式規範"E"的右邊會先參考左邊所要顯示的位數,然後決定是多少指數,並依規範顯示n位指數位數。

4、如果格式規範"E"左邊的位數足夠的話(正指數),則格式規範"E+"、"E"、"E-"表現出來的樣式都會是E+;

如果格式規範"E"左邊的位數不夠的話(負指數),則格式規範"E+"、"E"、"E-"表現出來的樣式都會是E-;

如果格式規範"E"左邊的位數剛好的話(0指數),則格式規範"E+"表現出來的樣式為E+、

格式規範"E"表現出來的樣式為E、格式規範"E-"表現出來的樣式為E。

 

八、反斜線逸出字元 "\"

using System;

public class Example
{
    public static void Main()
    {
        double a = 1234.5678;
        Console.WriteLine(a.ToString("00.00"));
        Console.WriteLine(a.ToString("\\#00.00\\#"));
        Console.WriteLine(a.ToString(@"\#00.00\#"));

        Console.ReadKey();
    }
}

執行畫面

說明:

若要避免將字元解譯為格式規範,您可以在前面加上反斜線逸出字元,

逸出字元表示接下來的字元是字元常值,應該原封不動地放入結果字串中,如「\#」,

注意,字串裡的「"\#"」反斜線在整個字串中會被認為是跳脫字元(逸出字元)並不算字串的一部分,

所以必須在反斜線的旁邊又再加上一次反斜線,或者使用逐字字串常值字元 (@ 字元)也可。

 

九、常值字串分隔符號 "字串"

using System;

public class Example
{
    public static void Main()
    {
        double a = 1234.5678;
        Console.WriteLine(a.ToString("this value is #.0 value"));

        Console.ReadKey();
    }
}

執行結果

說明:

非格式規範的字元將原封不動地複製到結果字串。

 

十、區段分隔符號 ";"

using System;

public class Example
{
    public static void Main()
    {
        double posValue = 1234;
        double negValue = -1234;
        double zeroValue = 0;

        Console.WriteLine(posValue.ToString("posValue:0000;negValue:0000;zeroValue:0000"));
        Console.WriteLine(negValue.ToString("posValue:0000;negValue:0000;zeroValue:0000"));
        Console.WriteLine(zeroValue.ToString("posValue:0000;negValue:0000;zeroValue:0000"));

        Console.ReadKey();
    }
}

執行結果

說明:

由";"符號來分隔三個區段來使用,當只有一個區段時(沒有";"分隔符號),

則此格式字串適用於所有的值。當有二個區段時(一個";"分隔符號),

則第一個區段適用於正數值及零值,第二個區段適用於負數值。

當有三個區段時(二個";"分隔符號),則第一個區段適用於正數值,

第二個區段適用於負數值,而第三個區段則適用於零值。

 

參考資料:

自訂數值格式字串