共用方式為


自訂數值格式字串

您可以建立由一個或多個自訂數值規範所組成的自訂數值格式字串,以定義如何格式化數值資料。 自訂數值格式字串是非 標準數值格式字串的任何格式字串

所有數值類型方法的某些 ToString 多載都支援自定義數值格式字串。 例如,您可以將數值格式字串ToString(String)提供給 型別ToString(String, IFormatProvider)的 和 Int32 方法。 .NET 複合格式功能也支援自定義數值格式字串,由 和 Write 類別的WriteLine一些 ConsoleStreamWriter 方法、String.Format方法和 StringBuilder.AppendFormat 方法使用。 字串插補 功能也支援自定義數值格式字串。

小提示

您可以下載 格式化公用程式,這是 .NET Core Windows Forms 應用程式,可讓您將格式字串套用至數值或日期和時間值,並顯示結果字元串。 原始碼適用於 C#Visual Basic

下表說明自訂數值格式規範,並顯示每個格式範例所產生的範例輸出。 如需使用自定義數值格式字串的其他資訊,請參閱 Notes一節, 以取得其使用的完整說明。

格式規範 名稱 說明 範例
0 零值預留位置 以對應的數字 (如果有的話) 取代零,否則結果字串中會出現零。

詳細資訊: “0” 自定義規範
1234.5678 (“00000”) -> 01235

0.45678 (“0.00”, en-US) -> 0.46

0.45678 (“0.00”, fr-FR) -> 0,46
"#" 數字預留位置 將 "#" 符號取代為對應的數字 (如果有的話),否則結果字串中不會出現任何數字。

請注意,如果輸入字串中的對應數位為非顯著 0,則結果字串中不會顯示任何數位。 例如,0003 (“####”) -> 3。

詳細資訊: “#” 自定義規範
1234.5678 (“#####”) -> 1235

0.45678 (“#.##”, en-US) -> .46

0.45678 (“#.##”, fr-FR) -> ,46
"." 小數點 決定結果字串中小數點的位置。

詳細資訊: “.”自定義規範
0.45678 (“0.00”, en-US) -> 0.46

0.45678 (“0.00”, fr-FR) -> 0,46
"," 群組分隔符號和數值範圍 同時做為群組分隔符號和數值縮放規範。 如果做為群組分隔符號,則會在每個群組之間插入當地語系化群組分隔符號字元。 做為數值縮放規範時,每指定一個逗號就會將數字除以 1000。

詳細資訊: “,”自定義規範
群組分隔符號規範:

2147483647 (“##,#”, en-US) -> 2,147,483,647

2147483647 (“#,#”, es-ES) -> 2.147.483.647

縮放規範:

2147483647 (“#,#,,”, en-US) -> 2,147

2147483647 (“#,#,,”, es-ES) -> 2.147
“%” 百分比預留位置 將數字乘以 100,並在結果字串中插入當地語系化的百分比符號。

詳細資訊: “%” 自定義規範
0.3697 (“%#0.00”, en-US) -> %36.97

0.3697 (“%#0.00”, el-GR) -> %36,97

0.3697 (“##.0 %”, en-US) -> 37.0 %

0.3697 (“##.0 %”, el-GR) -> 37,0 %
"‰" 千分之一符號預留位置 將數字乘以 1000,並在結果字串中插入當地語系化的千分比符號。

詳細資訊: “\” 自定義規範
0.03697 (“#0.00\”, en-US) -> 36.97*

0.03697 (“#0.00\”, ru-RU) -> 36,97*
“E0”

“E+0”

“E-0”

"E0"

"E+0"

"E-0"
指數表示法 如果後面至少接著一個 0 (零),則使用指數標記法來格式化結果。 大小寫 "E" 或 "e" 表示結果字串中指數符號的大小寫。 接在 "E" 或 "e" 字元後面的零個數決定指數中的最少位數。 加號 (+) 表示指數前面一律加上正負號字元。 減號 (-) 表示只在負指數前面才加上正負號字元。

詳細資訊: “E” 和 “e” 自定義規範
987654 (“#0.0e0”) -> 98.8e4

1503.92311 (“0.0##e+00”) -> 1.504e+03

1.8901385E-16 (“0.0e+00”) -> 1.9e-16
"\" 跳脫字元 將下一個字元解譯為常值,而不是自定義格式規範。

詳細資訊: “\” 逸出字元
987654 (“\###00\#”) -> #987654#
'字串'

string
常值字串分隔符號 表示應該將所括住的字元原封不動地複製到結果字串。

詳細資訊: 字元常值
68 (“# 'degrees'”) -> 68 度

68 (“#' degrees'”) -> 68 度
; 區段分隔符號 以個別格式字串來定義正數、負數和零值的區段。

詳細資訊: “;”區段分隔符
12.345 ("#0.0#;(#0.0#;-\0-“) -> 12.35

0 ("#0.0#;(#0.0#;-\0-“) -> -0-

-12.345 ("#0.0#;(#0.0#;-\0-“) -> (12.35)

12.345 ("#0.0#;(#0.0#)“) -> 12.35

0 ("#0.0#;(#0.0#)“) -> 0.0

-12.345 ("#0.0#;(#0.0#)“) -> (12.35)
其他 所有其他字元 字元會原封不動地複製到結果字串。

詳細資訊: 字元常值
68 (“# °”) -> 68 °

下列各節提供每個自訂數值格式規範的詳細資訊。

備註

本文中的一些 C# 範例會在 Try.NET 內嵌程式代碼執行器和遊樂場中執行。 選取 [執行] 按鈕以在互動式視窗中執行範例。 執行程式碼之後,您便可以修改它,並再選取一次 [執行] 來執行修改過的程式碼。 修改過的程式代碼會在互動式視窗中執行,或者,如果編譯失敗,互動式視窗會顯示所有 C# 編譯程式錯誤訊息。

"0" 自訂規範

"0" 自訂格式規範是當做零預留位置符號。 如果正在格式化的值有數字位於格式字串中出現零的位置上,則該數字會複製到結果字串,否則結果字串中會出現零。 小數點前最左邊的零和小數點後最右邊的零位置,決定要一直在輸出字串中出現的位數範圍。

"00" 規範會造成數值捨入至最接近的小數點前面數值,而其中永遠使用遠離零的捨入方式。 例如,使用 "00" 格式化 34.5 將會得到值 35。

下列範例顯示使用包含零預留位置的自訂格式字串來格式化的幾個值。

 double value;

 value = 123;
 Console.WriteLine(value.ToString("00000"));
 Console.WriteLine(String.Format("{0:00000}", value));
 // Displays 00123

 value = 1.2;
 Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                   "{0:0.00}", value));
 // Displays 1.20

 Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                 "{0:00.00}", value));
 // Displays 01.20

 CultureInfo daDK = CultureInfo.CreateSpecificCulture("da-DK");
 Console.WriteLine(value.ToString("00.00", daDK));
 Console.WriteLine(String.Format(daDK, "{0:00.00}", value));
 // Displays 01,20

 value = .56;
 Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                 "{0:0.0}", value));
 // Displays 0.6

 value = 1234567890;
 Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));	
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                 "{0:0,0}", value));	
 // Displays 1,234,567,890

 CultureInfo elGR = CultureInfo.CreateSpecificCulture("el-GR");
 Console.WriteLine(value.ToString("0,0", elGR));	
Console.WriteLine(String.Format(elGR, "{0:0,0}", value));	
 // Displays 1.234.567.890

 value = 1234567890.123456;
 Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));	
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                 "{0:0,0.0}", value));	
 // Displays 1,234,567,890.1

 value = 1234.567890;
 Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture));	
 Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                 "{0:0,0.00}", value));	
 // Displays 1,234.57
Dim value As Double

value = 123
Console.WriteLine(value.ToString("00000"))
Console.WriteLine(String.Format("{0:00000}", value))
' Displays 00123

value = 1.2
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                  "{0:0.00}", value))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:00.00}", value))
' Displays 01.20
Dim daDK As CultureInfo = CultureInfo.CreateSpecificCulture("da-DK")
Console.WriteLine(value.ToString("00.00", daDK))
Console.WriteLine(String.Format(daDK, "{0:00.00}", value))
' Displays 01,20

value = .56
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.0}", value))
' Displays 0.6

value = 1234567890
Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0,0}", value))
' Displays 1,234,567,890
Dim elGR As CultureInfo = CultureInfo.CreateSpecificCulture("el-GR")
Console.WriteLine(value.ToString("0,0", elGR))
Console.WriteLine(String.Format(elGR, "{0:0,0}", value))
' Displays 1.234.567.890

value = 1234567890.123456
Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0,0.0}", value))
' Displays 1,234,567,890.1

value = 1234.567890
Console.WriteLine(value.ToString("0,0.00", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0,0.00}", value))
' Displays 1,234.57

回到數據表

"#" 自訂規範

"#" 自訂格式規範是當做數字預留位置符號。 如果正在格式化的值有數字位於格式字串中出現 "#" 符號的位置上,則該數字會複製到輸出字串。 否則,沒有東西會存放在結果字串中的那個位置。

請注意,即使零是字串中唯一的數字,這個規範永遠不會顯示不是有效位數的零。 只有當它是所顯示數位中的有效位數時,才會顯示零。

"##" 格式字串會造成數值捨入至最接近的小數點前面數值,而其中永遠使用遠離零的捨入方式。 例如,使用 "##" 格式化 34.5 將會得到值 35。

下列範例顯示使用包含數字預留位置的自訂格式字串來格式化的幾個值。

double value;

value = 1.2;
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#.##}", value));
// Displays 1.2

value = 123;
Console.WriteLine(value.ToString("#####"));
Console.WriteLine(String.Format("{0:#####}", value));
// Displays 123

value = 123456;
Console.WriteLine(value.ToString("[##-##-##]"));
Console.WriteLine(String.Format("{0:[##-##-##]}", value));
 // Displays [12-34-56]

value = 1234567890;
Console.WriteLine(value.ToString("#"));
Console.WriteLine(String.Format("{0:#}", value));
// Displays 1234567890

Console.WriteLine(value.ToString("(###) ###-####"));
Console.WriteLine(String.Format("{0:(###) ###-####}", value));
// Displays (123) 456-7890
Dim value As Double

value = 1.2
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#.##}", value))
' Displays 1.2

value = 123
Console.WriteLine(value.ToString("#####"))
Console.WriteLine(String.Format("{0:#####}", value))
' Displays 123

value = 123456
Console.WriteLine(value.ToString("[##-##-##]"))
Console.WriteLine(String.Format("{0:[##-##-##]}", value))
' Displays [12-34-56]

value = 1234567890
Console.WriteLine(value.ToString("#"))
Console.WriteLine(String.Format("{0:#}", value))
' Displays 1234567890

Console.WriteLine(value.ToString("(###) ###-####"))
Console.WriteLine(String.Format("{0:(###) ###-####}", value))
' Displays (123) 456-7890

若要傳回以空格取代不存在數位或前置零的結果字串,請使用 複合格式設定功能 並指定欄位寬度,如下列範例所示。

using System;

public class SpaceOrDigit
{
   public static void Main()
   {
      Double value = .324;
      Console.WriteLine("The value is: '{0,5:#.###}'", value);
   }
}
// The example displays the following output if the current culture
// is en-US:
//      The value is: ' .324'
Module SpaceExample
    Public Sub Main()
        Dim value As Double = 0.324
        Console.WriteLine("The value is: '{0,5:#.###}'", value)
    End Sub
End Module

' The example displays the following output if the current culture
' is en-US:
'      The value is: ' .324'

回到數據表

"." 自訂規範

"." 自訂格式規範會將當地語系化的十進位分隔符號插入結果字串中。 格式字串中第一個點決定所格式化值中的小數分隔符號位置;任何其他點將被忽略。 如果格式規範以 「結尾,則只會將有效位數格式化為結果字串。

做為結果字串中小數分隔符的字元不一定是句號;它是由 NumberDecimalSeparator 控件格式設定之 NumberFormatInfo 物件的 屬性所決定。

下列範例使用 "." 格式規範來定義幾個結果字串中小數點的位置。

double value;

value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.00}", value));
// Displays 1.20

Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:00.00}", value));
// Displays 01.20

Console.WriteLine(value.ToString("00.00",
                  CultureInfo.CreateSpecificCulture("da-DK")));
Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                  "{0:00.00}", value));
// Displays 01,20

value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#0.##%}", value));
// Displays 8.6%

value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                  "{0:0.###E+0}", value));
 // Displays 8.6E+4
Dim value As Double

value = 1.2
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.00}", value))
' Displays 1.20

Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:00.00}", value))
' Displays 01.20

Console.WriteLine(value.ToString("00.00", _
                  CultureInfo.CreateSpecificCulture("da-DK")))
Console.WriteLine(String.Format(CultureInfo.CreateSpecificCulture("da-DK"),
                  "{0:00.00}", value))
' Displays 01,20

value = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#0.##%}", value))
' Displays 8.6%

value = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                  "{0:0.###E+0}", value))
' Displays 8.6E+4

回到數據表

"," 自訂規範

"," 字元同時當做群組分隔符號和數值縮放規範。

  • 群組分隔符號:如果在用於格式化數字整數位數的兩個數字預留位置 (0 或 #) 之間指定一個或多個逗號,則會在輸出的整數部分中在每個數字群組之間插入群組分隔符號字元。

    NumberGroupSeparator目前 NumberGroupSizes 物件的 和 NumberFormatInfo 屬性會決定用來做為數位群組分隔符的字元,以及每個數位群組的大小。 例如,如果使用字串 "#,#" 和不變的文化特性來格式化數字 1000,則輸出為 "1,000"。

  • 數值縮放規範:如果在明確或隱含小數點的左側緊接著指定一個或多個逗號,則每指定一個逗號就會將要格式化的數字除以 1000。 例如,如果使用字串 "0,," 來格式化數字 1 億,則其輸出為 "100"。

您可以在相同的格式字串內使用群組分隔符號和數值縮放規範。 例如,如果使用字串 "#,0,," 和不變的文化特性來格式化數字 10 億,則輸出為 "1,000"。

下列範例示範使用逗號做為群組分隔符號。

double value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,#}", value));
// Displays 1,234,567,890

Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,##0,,}", value));
// Displays 1,235      	
Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,#}", value))
' Displays 1,234,567,890

Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,##0,,}", value))
' Displays 1,235

下列範例示範使用逗點做為數值縮放的規範。

double value = 1234567890;
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));	
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,,}", value));	
// Displays 1235

Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,,,}", value));
// Displays 1

Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,##0,,}", value));
// Displays 1,235
Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#,,}", value))
' Displays 1235

Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,,,}", value))
' Displays 1

Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#,##0,,}", value))
' Displays 1,235

回到數據表

"%" 自訂規範

格式字串中的百分比符號 (%) 會導致數位在格式化之前乘以 100。 數字中會根據格式字串中出現 % 的位置,插入當地語系化百分比符號。 所使用的百分比字元是由 PercentSymbol 目前 NumberFormatInfo 對象的 屬性所定義。

下列範例會定義數個自定義格式字串,其中包含 「%」 自定義規範。

double value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#0.##%}", value));
// Displays 8.6%
Dim value As Double = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:#0.##%}", value))
' Displays 8.6%

回到數據表

"‰" 自訂規範

格式字串中的每千米字元 (≦ 或 \u2030) 會導致數位在格式化之前乘以 1000。 傳回的字串中會根據格式字串中出現 ‰ 符號的位置,插入適當的千分比符號。 所使用的每千米字元是由 NumberFormatInfo.PerMilleSymbol 提供特定文化特性格式資訊的 對象的 屬性所定義。

下列範例會定義包含 "‰" 自訂規範的自訂格式字串。

double value = .00354;
string perMilleFmt = "#0.## " + '\u2030';
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:" + perMilleFmt + "}", value));
// Displays 3.54‰
Dim value As Double = .00354
Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:" + perMilleFmt + "}", value))
' Displays 3.54 ‰

回到數據表

"E" 和 "e" 自訂規範

如果 "E"、"E+"、"E-"、"e"、"e+" 或 "e-" 中的任何一個字串出現在格式字串中,且後面至少緊接著一個零,則會使用科學標記法來格式化數字,並在數字和指數之間插入 "E" 或 "e"。 接在科學標記法指標之後的零個數決定要在指數部分輸出的最少位數。 "E+" 和 "e+" 格式表示指數前面應該一律加上加號或減號。 "E"、"E-"、"e" 或 "e-" 格式表示只應該在負數指數前面加上正負號字元。

下列範例使用科學記號規範來格式化幾個數值。

double value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E+0}", value));
// Displays 8.6E+4

Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E+000}", value));
// Displays 8.6E+004

Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E-000}", value));
// Displays 8.6E004
Dim value As Double = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E+0}", value))
' Displays 8.6E+4

Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E+000}", value))
' Displays 8.6E+004

Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                "{0:0.###E-000}", value))
' Displays 8.6E004

回到數據表

“\” 逸出字元

格式字串中的 "#"、"0"、"."、","、"%" 和 "‰" 符號會解譯為格式規範,而不是常值字元。 根據其在自定義格式字串中的位置,大寫和小寫 “E” 以及 + 和 - 符號也可以解譯為格式規範。

若要防止字元解譯為格式規範,您可以在字元前面加上反斜杠,也就是逸出字元。 逸出字元表示接下來的字元是字元常值,應該原封不動地放入結果字串中。

若要在結果字串中加上反斜線,您必須再加上一個反斜線 (變成 \\),才能將反斜線解譯為常值。

備註

某些編譯器 (例如 C++ 和 C# 編譯器) 也可能會將單一反斜線字元解譯為逸出字元。 為了確保字串在格式化時能夠正確獲得解譯,您可以在 C# 中的字串前面加上逐字字串常值字元 (@ 字元),或在 C# 和 C++ 中的每個反斜線前面再加上一個反斜線字元。 下列 C# 範例示範這兩種做法。

下列範例會使用逸出字元來防止格式化作業將 “#”、“0” 和 “\” 字元解譯為逸出字元或格式規範。 C# 範例會使用額外的反斜杠來確保反斜杠會解譯為常值字元。

int value = 123;
Console.WriteLine(value.ToString("\\#\\#\\# ##0 dollars and \\0\\0 cents \\#\\#\\#"));
Console.WriteLine(String.Format("{0:\\#\\#\\# ##0 dollars and \\0\\0 cents \\#\\#\\#}",
                                value));
// Displays ### 123 dollars and 00 cents ###

Console.WriteLine(value.ToString(@"\#\#\# ##0 dollars and \0\0 cents \#\#\#"));
Console.WriteLine(String.Format(@"{0:\#\#\# ##0 dollars and \0\0 cents \#\#\#}",
                                value));
// Displays ### 123 dollars and 00 cents ###

Console.WriteLine(value.ToString("\\\\\\\\\\\\ ##0 dollars and \\0\\0 cents \\\\\\\\\\\\"));
Console.WriteLine(String.Format("{0:\\\\\\\\\\\\ ##0 dollars and \\0\\0 cents \\\\\\\\\\\\}",
                                value));
// Displays \\\ 123 dollars and 00 cents \\\

Console.WriteLine(value.ToString(@"\\\\\\ ##0 dollars and \0\0 cents \\\\\\"));
Console.WriteLine(String.Format(@"{0:\\\\\\ ##0 dollars and \0\0 cents \\\\\\}",
                                value));
// Displays \\\ 123 dollars and 00 cents \\\
Dim value As Integer = 123
Console.WriteLine(value.ToString("\#\#\# ##0 dollars and \0\0 cents \#\#\#"))
Console.WriteLine(String.Format("{0:\#\#\# ##0 dollars and \0\0 cents \#\#\#}",
                                value))
' Displays ### 123 dollars and 00 cents ###

Console.WriteLine(value.ToString("\\\\\\ ##0 dollars and \0\0 cents \\\\\\"))
Console.WriteLine(String.Format("{0:\\\\\\ ##0 dollars and \0\0 cents \\\\\\}",
                                value))
' Displays \\\ 123 dollars and 00 cents \\\

回到數據表

";" 區段分隔符號

冒號 (;) 是條件式格式規範,這個規範會根據數字的值是正數、負數還是零,將不同的格式套用至數字。 若要產生這個行為,自訂格式字串可以包含多達三個以分號分隔的區段, 下表將說明這些區段。

區段數 說明
一個區段 此格式字串適用於所有的值。
兩個區段 第一個區段適用於正數值及零值,第二個區段適用於負數值。

如果要格式化的數字為負數,但依照第二個區段的格式四捨五入之後成為零,則產生的零會依照第一個區段來格式化。
三個區段 第一個區段適用於正數值,第二個區段適用於負數值,而第三個區段則適用於零值。

第二個區段可留白 (分號之間沒有任何內容),此時第一個區段將套用到所有非零值。

如果要格式化的數字不是零,但依照第一個或第二個區段的格式四捨五入之後成為零,則產生的零會依照第三個區段來格式化。

區段分隔符號會在最終值已格式化時,忽略任何事先存在而與數值相關的格式。 例如,負數值在使用區段分隔符號時永遠不以負號來顯示。 如果您想要最終的格式化值具有負號,您應該明確包含負號做為自訂格式規範的一部分。

下列範例會使用 ";" 格式規範,以不同方式格式化正數、負數和零。

double posValue = 1234;
double negValue = -1234;
double zeroValue = 0;

string fmt2 = "##;(##)";
string fmt3 = "##;(##);**Zero**";

Console.WriteLine(posValue.ToString(fmt2));
Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue));
// Displays 1234

Console.WriteLine(negValue.ToString(fmt2));
Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue));
// Displays (1234)

Console.WriteLine(zeroValue.ToString(fmt3));
Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue));
// Displays **Zero**
Dim posValue As Double = 1234
Dim negValue As Double = -1234
Dim zeroValue As Double = 0

Dim fmt2 As String = "##;(##)"
Dim fmt3 As String = "##;(##);**Zero**"

Console.WriteLine(posValue.ToString(fmt2))
Console.WriteLine(String.Format("{0:" + fmt2 + "}", posValue))
' Displays 1234

Console.WriteLine(negValue.ToString(fmt2))
Console.WriteLine(String.Format("{0:" + fmt2 + "}", negValue))
' Displays (1234)

Console.WriteLine(zeroValue.ToString(fmt3))
Console.WriteLine(String.Format("{0:" + fmt3 + "}", zeroValue))
' Displays **Zero**

回到數據表

字元字面值

自訂數值格式字串中出現的格式規範一律會解譯為格式字元,永遠不會解譯為常值字元。 這包含下列字元:

所有其他字元一律會解譯為字元常值,並在格式化作業中,原封不動地包含在結果字串中。 在剖析作業中,它們必須完全符合輸入字串中的字元;這項比較會區分大小寫。

下列範例說明常值字元單位 (在此案例中為千分位) 的一個常見用法:

double n = 123.8;
Console.WriteLine($"{n:#,##0.0K}");
// The example displays the following output:
//      123.8K
Dim n As Double = 123.8
Console.WriteLine($"{n:#,##0.0K}")
' The example displays the following output:
'       123.8K

您可以使用兩種方式來指定將字元解譯為常值字元,而不是格式字元,以便包含在結果字串中,或在輸入字串中成功剖析:

  • 逸出格式字元。 如需詳細資訊,請參閱 “\” 逸出字元

  • 以引號括住整個常值字串。

下列範例會使用這兩種方法,在自訂數值格式字串中包含保留的字元。

double n = 9.3;
Console.WriteLine($@"{n:##.0\%}");
Console.WriteLine($@"{n:\'##\'}");
Console.WriteLine($@"{n:\\##\\}");
Console.WriteLine();
Console.WriteLine($"{n:##.0'%'}");
Console.WriteLine($@"{n:'\'##'\'}");
// The example displays the following output:
//      9.3%
//      '9'
//      \9\
//
//      9.3%
//      \9\
Dim n As Double = 9.3
Console.WriteLine($"{n:##.0\%}")
Console.WriteLine($"{n:\'##\'}")
Console.WriteLine($"{n:\\##\\}")
Console.WriteLine()
Console.WriteLine($"{n:##.0'%'}")
Console.WriteLine($"{n:'\'##'\'}")
' The example displays the following output:
'      9.3%
'      '9'
'      \9\
'
'      9.3%
'      \9\

註釋

無限浮點數和 NaN

無論格式字串為何,如果 、 Half或 浮點型別的值Single是正無限大、負無限大,或不是數位 (NaN),格式化字串就是目前適用Double物件所指定的個別PositiveInfinitySymbolNegativeInfinitySymbolNaNSymbol 屬性NumberFormatInfo的值。

控制面板設定

[控制面板] 中 [地區及語言選項 ] 專案中的設定會影響格式化作業所產生的結果字串。 這些設定可用來初始化 NumberFormatInfo 與目前文化特性相關聯的物件,而目前的文化特性會提供用來控管格式設定的值。 使用不同設定的計算機會產生不同的結果字串。

此外,如果您使用 建 CultureInfo(String) 構函式來具現化代表與目前系統文化特性相同文化特性的新 CultureInfo 物件,則 [控制面板] 中 [地區及語言選項 ] 專案所建立的任何自定義都會套用至新 CultureInfo 物件。 您可以使用 建 CultureInfo(String, Boolean) 構函式來建立 CultureInfo 不會反映系統自訂的物件。

四捨五入和定點格式字串

對於固定點格式字串(也就是不包含科學表示法格式字元的格式字元串),數位會四捨五入為小數點右邊的數位佔位元數目。 如果格式字串不包含小數點,數位會四捨五入為最接近的整數。 如果數值有比小數點左邊的數字預留位置還要多的位數,額外位數會緊接第一個數字預留位置之前複製到輸出字串。

回到數據表

範例

下列範例示範兩個自訂數值格式字串。 在這兩個範例中,數字預留位置 (#) 會顯示數值資料,而所有其他字元則會複製到結果字串中。

double number1 = 1234567890;
string value1 = number1.ToString("(###) ###-####");
Console.WriteLine(value1);

int number2 = 42;
string value2 = number2.ToString("My Number = #");
Console.WriteLine(value2);
// The example displays the following output:
//       (123) 456-7890
//       My Number = 42
Dim number1 As Double = 1234567890
Dim value1 As String = number1.ToString("(###) ###-####")
Console.WriteLine(value1)

Dim number2 As Integer = 42
Dim value2 As String = number2.ToString("My Number = #")
Console.WriteLine(value2)
' The example displays the following output:
'       (123) 456-7890
'       My Number = 42

回到數據表

另請參閱