共用方式為


標準數值格式字串

標準數值格式字串可用來格式化一般數值類型。 標準數值格式字串的格式為 [format specifier][precision specifier],其中:

  • 格式規範 是單一字母字元,可指定數位格式的類型,例如貨幣或百分比。 任何包含多個字母字元的數值格式字串,包括空格符,會解譯為自定義數值格式字串。 如需詳細資訊,請參閱 自定義數值格式字串

  • 有效位數規範 是會影響所產生字串中位數的選擇性整數。 在 .NET 7 和更新版本中,最大有效位數值為999,999,999。 在 .NET 6 中,最大有效位數值為 Int32.MaxValue。 在舊版 .NET 中,精確度的範圍可以從 0 到 99。 有效位數規範會控制數位字串表示中的位數。 它不會四捨五入數位本身。 若要執行四捨五入作業,請使用 Math.CeilingMath.FloorMath.Round 方法。

    有效位數規範 控制結果字串中的小數位數時,結果字串會反映捨入到最接近無限精確結果的可表示結果的數位。 如果有兩個同樣接近可表示的結果:

    • 在最多 .NET Core 2.0 的 .NET Framework 和 .NET Core 上,運行時間會選取具有較大有效位數的結果(也就是使用 MidpointRounding.AwayFromZero)。
    • 在 .NET Core 2.1 和更新版本上,運行時間會選取具有偶數最小有效位數的結果(也就是使用 MidpointRounding.ToEven)。

    備註

    有效位數規範會決定結果字串中的位數。 若要以前置或尾端空格填補結果字串,請使用 複合格式 設定功能,並在格式專案中定義 寬度元件

標準數值格式字串支援:

小提示

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

標準格式規範

下表描述標準數值格式規範,並顯示每個格式規範所產生的範例輸出。 如需使用標準數值格式字串的詳細資訊,請參閱 Notes 一節,以及程式 代碼範例 一節,以取得其使用的完整說明。

特定文化特性之格式化字串的結果可能與下列範例不同。 您所使用的作系統設定、使用者設定、環境變數和 .NET 版本都可能會影響格式。 例如,從 .NET 5 開始,.NET 會嘗試跨平台統一文化格式。 如需詳細資訊,請參閱 .NET 全球化和ICU

格式規範 名稱 說明 範例
“B” 或 “b” 二進制 結果:二進位字串。

支援:僅限整數類型 (.NET 8+)。

有效位數規範:結果字串中的位數。

詳細資訊: 二進位 (“B”) 格式規範
42 (“B”)
-> 101010

255 (“b16”)
-> 0000000011111111
“C” 或 “c” 貨幣 結果:貨幣值。

支援:所有數值類型。

有效位數規範:十進位數。

預設有效位數規範:由 NumberFormatInfo.CurrencyDecimalDigits定義。

詳細資訊: 貨幣(“C”) 格式規範
123.456 (“C”, en-US)
-> 123.46 美元

123.456 (“C”, fr-FR)
-> 123,46 歐元

123.456 (“C”, ja-JP)
-> 123 日元

-123.456 (“C3”, en-US)
-> (\$123.456)

-123.456 (“C3”, fr-FR)
-> -123,456 歐元

-123.456 (“C3”, ja-JP)
-> -¥123.456 (日圓)
“D” 或 “d” 十進制 結果:具有選擇性負號的整數數位。

支援:僅限整數型別。

有效位數規範:位數下限。

默認有效位數規範:所需的位數下限。

詳細資訊: Decimal(“D”) 格式規範
1234 (“D”)
-> 1234 年

-1234 (“D6”)
-> -001234
“E” 或 “e” 指數(科學) 結果:指數表示法。

支援:所有數值類型。

有效位數規範:十進位數。

默認有效位數規範:6。

詳細資訊: 指數 (“E”) 格式規範
1052.0329112756 (“E”, en-US)
-> 1.052033E+003

1052.0329112756 (“e”, fr-FR)
-> 1,052033E+003

-1052.0329112756 (“e2”, en-US)
-> -1.05E+003

-1052.0329112756 (“E2”, fr-FR)
-> -1,05E+003
“F” 或 “f” 固定點 結果:具有選擇性負號的整數和十進位數。

支援:所有數值類型。

有效位數規範:十進位數。

預設有效位數規範:由 NumberFormatInfo.NumberDecimalDigits定義。

詳細資訊: Fixed-Point (“F”) 格式規範
1234.567 (“F”, en-US)
-> 1234.57

1234.567 (“F”, de-DE)
-> 1234,57 元

1234 (“F1”, en-US)
-> 1234.0

1234 (“F1”, de-DE)
-> 1234,0

-1234.56 (“F4”, en-US)
-> -1234.5600

-1234.56 (“F4”, de-DE)
-> -1234,5600 元
“G” 或 “g” 一般 結果:固定點或科學表示法更精簡。

支援:所有數值類型。

有效位數規範:有效位數。

默認有效位數規範:取決於數值類型。

詳細資訊: 一般 (“G”) 格式規範
-123.456 (“G”, en-US)
-> -123.456

-123.456 (“G”, sv-SE)
-> -123,456

123.4546 (“G4”, en-US)
-> 123.5

123.4546 (“G4”, sv-SE)
-> 123,5

-1.234567890e-25 (“G”, en-US)
-> -1.23456789E-25

-1.234567890e-25 (“G”, sv-SE)
-> -1,23456789E-25
“N” 或 “n” 數目 結果:整數和十進位數、群組分隔符,以及具有選擇性負號的小數分隔符。

支援:所有數值類型。

有效位數規範:小數字數的所需數目。

預設有效位數規範:由 NumberFormatInfo.NumberDecimalDigits定義。

詳細資訊: 數值 (“N”) 格式規範
1234.567 (“N”, en-US)
-> 1,234.57

1234.567 (“N”, ru-RU)
-> 1 234,57

1234 (“N1”, en-US)
-> 1,234.0

1234 (“N1”, ru-RU)
-> 1 234,0

-1234.56 (“N3”, en-US)
-> -1,234.560

-1234.56 (“N3”, ru-RU)
-> -1 234,560
“P” 或 “p” 百分比 結果:數位乘以 100,並以百分比符號顯示。

支援:所有數值類型。

有效位數規範:小數字數的所需數目。

預設有效位數規範:由 NumberFormatInfo.PercentDecimalDigits定義。

詳細資訊: 百分比 (“P”) 格式規範
1 (“P”, en-US)
-> 100.00 %

1 (“P”, fr-FR)
-> 100,000 %

-0.39678 (“P1”, en-US)
-> -39.7 %

-0.39678 (“P1”, fr-FR)
-> -39.7 %
“R” 或 “r” 來回行程 結果:可以往返相同數位的字串。

支援: SingleDoubleBigInteger

注意:僅針對 BigInteger 類型建議使用。 針對類型,請使用 「G17」;針對DoubleSingle類型,請使用 「G9」。。
有效位數規範:忽略。

詳細資訊: 來回 (“R”) 格式規範
123456789.12345678 (“R”)
-> 123456789.12345678

-1234567890.12345678 (“R”)
-> -1234567890.1234567
“X” 或 “x” 十六進位 結果:十六進位字串。

支援:僅限整數型別。

有效位數規範:結果字串中的位數。

詳細資訊: 十六進位 (“X”) 格式規範
255 (“X”)
-> FF

-1 (“x”)
-> FF

255 (“x4”)
-> 00FF

-1 (“X4”)
-> 00FF
任何其他單一字元 未知規範 結果:執行時丟出 a FormatException

使用標準數值格式字串

備註

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

標準數值格式字串可用來以下欄其中一種方式定義數值的格式設定:

  • 它可以傳遞至 TryFormat 方法或具有 ToString 參數之方法的多format載。 下列範例會將數值格式化為目前文化特性中的貨幣字串(在此案例中為 en-US 文化特性)。

    decimal value = 123.456m;
    Console.WriteLine(value.ToString("C2"));
    // Displays $123.46
    
    Dim value As Decimal = 123.456d
    Console.WriteLine(value.ToString("C2"))
    ' Displays $123.46
    
  • 它可以以與、 formatStringString.Format這類方法Console.WriteLine搭配使用的格式專案中,提供為 StringBuilder.AppendFormat 自變數。 如需詳細資訊,請參閱 複合格式設定。 下列範例會使用格式專案在字串中插入貨幣值。

    decimal value = 123.456m;
    Console.WriteLine($"Your account balance is {value:C2}.");
    // Displays "Your account balance is $123.46."
    
    Dim value As Decimal = 123.456d
    Console.WriteLine("Your account balance is {0:C2}.", value)
    ' Displays "Your account balance is $123.46."
    

    您可以選擇性地提供 alignment 自變數來指定數值欄位的寬度,以及其值是靠右或靠左對齊。 下列範例會將貨幣值靠左對齊 28 個字元欄位中,並將貨幣值靠右對齊 14 個字元欄位中。

    decimal[] amounts = { 16305.32m, 18794.16m };
    Console.WriteLine("   Beginning Balance           Ending Balance");
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts[0], amounts[1]);
    // Displays:
    //        Beginning Balance           Ending Balance
    //        $16,305.32                      $18,794.16
    
    Dim amounts() As Decimal = {16305.32d, 18794.16d}
    Console.WriteLine("   Beginning Balance           Ending Balance")
    Console.WriteLine("   {0,-28:C2}{1,14:C2}", amounts(0), amounts(1))
    ' Displays:
    '        Beginning Balance           Ending Balance
    '        $16,305.32                      $18,794.16      
    
  • 它可以在插入字串的插補表達式專案中提供為 formatString 自變數。 如需詳細資訊,請參閱 C# 參考中的 字串插補 一文或 Visual Basic 參考中的 插補字串 一文。

下列各節提供每個標準數值格式字串的詳細資訊。

二進位格式規範 (B)

二進位 (“B”) 格式規範會將數字轉換成二進位數位字串。 只有整數型別才支援此格式,而且只支援 .NET 8+。

有效位數規範表示所產生字串中所需的最小位數。 如有需要,數位會以左邊的零填補,以產生有效位數規範所指定的位數。

針對 BigInteger,正值一律有前置零,以區別其與負值。 這可確保剖析時輸出往返原始值。 例如,使用格式規範3轉換的數位"B2""011"。 這是因為二進位數"11"代表負值-1,因為它會解譯為由於2"B2"格式而完全位的數位。

結果字串不會受到目前 NumberFormatInfo 物件的格式化信息影響。

貨幣格式規範 (C)

“C” (或 currency) 格式規範會將數字轉換成代表貨幣金額的字串。 有效位數規範表示結果字串中所需的小數字數。 如果省略有效位數規範,則預設有效位數是由 NumberFormatInfo.CurrencyDecimalDigits 屬性所定義。

如果要格式化的值超過指定的或預設小數字數,則會在結果字串中四捨五入小數點值。 如果指定小數字數右邊的值是5或更大,則結果字串中的最後一個數位會捨入為零。

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出 NumberFormatInfo 控制所傳回字串格式的屬性。

NumberFormatInfo 屬性 說明
CurrencyPositivePattern 定義正值貨幣符號的位置。
CurrencyNegativePattern 定義負值貨幣符號的位置,並指定負號是以括弧或 NegativeSign 屬性表示。
NegativeSign 定義如果使用的負號,表示 CurrencyNegativePattern 未使用括弧。
CurrencySymbol 定義貨幣符號。
CurrencyDecimalDigits 定義貨幣值中的預設十進位數。 您可以使用有效位數規範來覆寫此值。
CurrencyDecimalSeparator 定義分隔整數和十進位數的字串。
CurrencyGroupSeparator 定義分隔整陣群組的字串。
CurrencyGroupSizes 定義出現在群組中的整數位數。

下列範例會使用貨幣格式規範來格式化 Double 值:

double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3",
                  CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       12.345,679 kr
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", _
                  CultureInfo.CreateSpecificCulture("da-DK")))
' The example displays the following output on a system whose
' current culture is English (United States):
'       $12,345.68
'       $12,345.679
'       kr 12.345,679

十進位格式規範 (D)

“D” (或 decimal) 格式規範會將數字轉換成十進位數位符串(0-9),如果數位為負數,則前面會加上減號。 只有整數型別才支援此格式。

有效位數規範表示所產生字串中所需的最小位數。 如有需要,數位會以左邊的零填補,以產生有效位數規範所指定的位數。 如果未指定有效位數規範,則預設值是表示沒有前置零之整數所需的最小值。

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 如下表所示,單一屬性會影響結果字串的格式設定。

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出數位為負數。

下列範例會使用十進位格式規範來格式化 Int32 值。

int value;

value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345

value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345
Dim value As Integer

value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345   
Console.WriteLine(value.ToString("D8"))
' Displays 00012345

value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345

指數格式規範 (E)

指數 (“E”) 格式規範會將數字轉換成格式為 “-d.ddd...E+ddd“ 或 ”-d.ddd...e+ddd“,其中每個 ”d“ 都表示數位 (0-9)。 如果數位為負數,字串會以減號開頭。 只有一個數位一律在小數點之前。

有效位數規範表示小數點之後所需的位數。 如果省略有效位數規範,則使用小數點之後的預設值為六位數。

格式規範的案例會指出是否要在指數前面加上 「E」 或 「e」。 指數一律包含加號或減號,以及至少三位數。 如果必要,指數會以零填補,以符合此最小值。

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出 NumberFormatInfo 控制所傳回字串格式的屬性。

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出係數和指數的數位都是負數。
NumberDecimalSeparator 定義字串,這個字串會將整數數位與係數中的小數位數分隔開來。
PositiveSign 定義表示指數為正數的字串。

下列範例會使用指數格式規範來格式化 Double 值:

double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004

Console.WriteLine(value.ToString("E",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004
Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004

Console.WriteLine(value.ToString("E", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004

固定點格式規範 (F)

固定點 (“F”) 格式規範會將數字轉換成格式為 “-ddd.ddd...” 格式的字串。其中每個 「d」 都表示數位 (0-9)。 如果數位為負數,字串會以減號開頭。

有效位數規範表示所需的小數位數。 如果省略有效位數規範,則目前的 NumberFormatInfo.NumberDecimalDigits 屬性會提供數值有效位數。

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出控制結果字串格式之 對象的屬性 NumberFormatInfo

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出數位為負數。
NumberDecimalSeparator 定義分隔整數數位與十進位數的字串。
NumberDecimalDigits 定義十進位數的預設數目。 您可以使用有效位數規範來覆寫此值。

下列範例會使用固定點格式規範來格式化 DoubleInt32 值:

int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F",
                  CultureInfo.InvariantCulture));
// Displays 17843.00

integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3",
                  CultureInfo.InvariantCulture));
// Displays -29541.000

double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934

doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));
// Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3",
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199
Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00

integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000

Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934

doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))
' Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3", _
                  CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199                        

一般格式規範 (G)

一般 (“G”) 格式規範會根據數位的類型以及有效位數規範是否存在,將數字轉換成更精簡的固定點或科學表示法。 有效位數規範會定義可出現在結果字串中的有效位數上限。 如果省略有效位數規範或零,數位的類型會決定預設有效位數,如下表所示。

數值類型 預設有效位數
ByteSByte 3 位數
Int16UInt16 5 位數
Int32UInt32 10 位數
Int64 19 位數
UInt64 20位數
BigInteger 沒有限制 (與 “R” 相同)
Half 代表數位的最小來回次數
Single 代表數位的最小來回次數 (在 .NET Framework 中,G7 是預設值)
Double 代表數位的最小來回次數 (在 .NET Framework 中,G15 是預設值)
Decimal 代表數位的最小來回次數

如果在以科學表示法表示法來表示數位所產生的指數大於 -5 且小於有效位數規範,則會使用固定點表示法:否則會使用科學表示法。 如果必要,結果會包含小數點,並在省略小數點之後的尾端零。 如果有效位數規範存在,且結果中的有效位數超過指定的有效位數,則會透過四捨五入來移除多餘的尾端數位。

不過,如果數位為 Decimal ,而且省略有效位數規範,則一律使用固定點表示法,並保留尾端零。

如果使用科學表示法,如果格式規範為 “G”,則結果中的指數前面會加上 “E”,如果格式規範為 “g”,則為 “e”。 指數至少包含兩位數。 這與指數格式規範所產生的科學表示法格式不同,其中指數中至少包含三位數。

搭配 Double 值使用時,“G17” 格式規範可確保原始 Double 值已成功往返。 這是因為 Double IEEE 754-2008 相容雙精確度 (binary64) 浮點數,最多可提供 17 個有效位數的有效位數。 在 .NET Framework 上,我們建議使用 ,而不是 “R” 格式規範,因為在某些情況下,“R” 無法成功往返雙精確度浮點值。

搭配 Single 值使用時,“G9” 格式規範可確保原始 Single 值可以順利往返。 這是因為 Single IEEE 754-2008 相容單精度 (binary32) 浮點數,最多可提供 9 個有效位數的有效位數。 基於效能考慮,我們建議使用 ,而不是 “R” 格式規範

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出 NumberFormatInfo 控制結果字串格式的屬性。

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出數位為負數。
NumberDecimalSeparator 定義分隔整數數位與十進位數的字串。
PositiveSign 定義表示指數為正數的字串。

下列範例會使用一般格式規範來格式化各種浮點值:

double number;

number = 12345.6789;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays  12345.6789
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68

number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06
Console.WriteLine(number.ToString("G",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06

number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023

number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03

number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416
Dim number As Double

number = 12345.6789
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays  12345.6789
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68 

number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06       
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06

number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023

number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03

number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416    

數值格式規範 (N)

數值 (“N”) 格式規範會將數字轉換成格式為 “-d,d,d.ddd...”的字串,其中 “-” 表示必要時為負數符號,“d” 表示數位 (0-9),“,”表示群組分隔符,而 “.” 表示小數點符號。 有效位數規範表示小數點之後所需的位數。 如果省略有效位數規範,則目前的 NumberFormatInfo.NumberDecimalDigits 屬性會定義小數字數。

結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出 NumberFormatInfo 控制結果字串格式的屬性。

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出數位為負數。
NumberNegativePattern 定義負值的格式,並指定負號是以括弧或 NegativeSign 屬性表示。
NumberGroupSizes 定義群組分隔符之間出現的整數位數。
NumberGroupSeparator 定義分隔整陣群組的字串。
NumberDecimalSeparator 定義分隔整數和十進位數的字串。
NumberDecimalDigits 定義十進位數的預設數目。 您可以使用有效位數規範來覆寫此值。

下列範例會使用數位格式規範來格式化各種浮點值:

double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1",
                  CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7

int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0
Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
                  CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12 445,7

Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0 

百分比格式規範 (P)

百分比 (“P”) 格式規範會將數位乘以 100,並將它轉換成代表百分比的字串。 有效位數規範表示所需的小數位數。 如果省略有效位數規範,則會使用目前 PercentDecimalDigits 屬性提供的預設數值有效位數。

下表列出 NumberFormatInfo 控制所傳回字串格式的屬性。

NumberFormatInfo 屬性 說明
PercentPositivePattern 定義正值百分比符號的位置。
PercentNegativePattern 定義負值的百分比符號和負號的位置。
NegativeSign 定義字串,指出數位為負數。
PercentSymbol 定義百分比符號。
PercentDecimalDigits 定義百分比值中的預設十進位數。 您可以使用有效位數規範來覆寫此值。
PercentDecimalSeparator 定義分隔整數和十進位數的字串。
PercentGroupSeparator 定義分隔整陣群組的字串。
PercentGroupSizes 定義出現在群組中的整數位數。

下列範例會使用百分比格式規範來格式化浮點值:

double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P",
                  CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %
Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
                  CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%     
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %

來回格式規範 (R)

來回 (“R”) 格式規範會嘗試確保轉換成字串的數值會剖析回相同的數值。 只有 HalfSingleDoubleBigInteger 型別才支援此格式。

在 .NET Framework 和 3.0 之前的 .NET Core 版本中,在某些情況下,“R” 格式規範無法成功往返 Double 值。 Double針對 和 Single 值,“R” 格式規範提供相對不佳的效能。 相反地,我們建議您針對值使用 Double 格式規範,並使用 「G9」 格式規範成功來回Single值。

BigInteger當值使用此規範格式化時,其字串表示會包含值中的所有BigInteger有效位數。

雖然您可以包含有效位數規範,但會被忽略。 使用這個規範時,來回行程的優先順序高於精確度。 結果字串會受到目前 NumberFormatInfo 物件的格式化資訊所影響。 下表列出 NumberFormatInfo 控制結果字串格式的屬性。

NumberFormatInfo 屬性 說明
NegativeSign 定義字串,指出數位為負數。
NumberDecimalSeparator 定義分隔整數數位與十進位數的字串。
PositiveSign 定義表示指數為正數的字串。

下列範例會使用來回格式規範來格式化 BigInteger 值。

using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      var value = BigInteger.Pow(Int64.MaxValue, 2);
      Console.WriteLine(value.ToString("R"));
   }
}
// The example displays the following output:
//      85070591730234615847396907784232501249
Imports System.Numerics

Module Example
    Public Sub Main()
        Dim value = BigInteger.Pow(Int64.MaxValue, 2)
        Console.WriteLine(value.ToString("R"))
    End Sub
End Module
' The example displays the following output:
'      85070591730234615847396907784232501249  

這很重要

在某些情況下,使用 或 Double 參數編譯並在 64 位系統上執行時,/platform:x64使用 /platform:anycpu “R” 標準數值格式字串格式化的值不會成功往返。 如需詳細資訊,請參閱下列段落。

若要解決使用 或 Double 參數編譯並在 64 位系統上執行時,使用 /platform:x64 “R” 標準數值格式字串格式化的值無法成功來回的問題/platform:anycpu,您可以使用 “G17” 標準數值格式字符串來格式化Double值。 下列範例會使用 「R」 格式字串搭配 Double 未成功往返的值,而且也會使用 「G17」 格式字串成功往返原始值:

Console.WriteLine("Attempting to round-trip a Double with 'R':");
double initialValue = 0.6822871999174;
string valueString = initialValue.ToString("R",
                                           CultureInfo.InvariantCulture);
double roundTripped = double.Parse(valueString,
                                   CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped:R}: {initialValue.Equals(roundTripped)}\n");

Console.WriteLine("Attempting to round-trip a Double with 'G17':");
string valueString17 = initialValue.ToString("G17",
                                             CultureInfo.InvariantCulture);
double roundTripped17 = double.Parse(valueString17,
                                     CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped17:R}: {initialValue.Equals(roundTripped17)}\n");
// If compiled to an application that targets anycpu or x64 and run on an x64 system,
// the example displays the following output:
//       Attempting to round-trip a Double with 'R':
//       .NET Framework:
//       0.6822871999174 = 0.68228719991740006: False
//       .NET:
//       0.6822871999174 = 0.6822871999174: True
//
//       Attempting to round-trip a Double with 'G17':
//       0.6822871999174 = 0.6822871999174: True
Imports System.Globalization

Module Example
    Public Sub Main()
        Console.WriteLine("Attempting to round-trip a Double with 'R':")
        Dim initialValue As Double = 0.6822871999174
        Dim valueString As String = initialValue.ToString("R",
                                                 CultureInfo.InvariantCulture)
        Dim roundTripped As Double = Double.Parse(valueString,
                                                  CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped, initialValue.Equals(roundTripped))
        Console.WriteLine()

        Console.WriteLine("Attempting to round-trip a Double with 'G17':")
        Dim valueString17 As String = initialValue.ToString("G17",
                                                   CultureInfo.InvariantCulture)
        Dim roundTripped17 As Double = double.Parse(valueString17,
                                              CultureInfo.InvariantCulture)
        Console.WriteLine("{0:R} = {1:R}: {2}",
                          initialValue, roundTripped17, initialValue.Equals(roundTripped17))
    End Sub
End Module
' If compiled to an application that targets anycpu or x64 and run on an x64 system,
' the example displays the following output:
'       Attempting to round-trip a Double with 'R':
'       .NET Framework:
'       0.6822871999174 = 0.68228719991740006: False
'       .NET:
'       0.6822871999174 = 0.6822871999174: True
'
'       Attempting to round-trip a Double with 'G17':
'       0.6822871999174 = 0.6822871999174: True

十六進位格式規範 (X)

十六進位 (“X”) 格式規範會將數字轉換成十六進位數位的字串。 格式規範的案例會指出是否針對大於9的十六進位數位使用大寫或小寫字元。 例如,使用 「X」 來產生 「ABCDEF」 和 「x」 來產生 「abcdef」。 只有整數型別才支援此格式。

有效位數規範表示所產生字串中所需的最小位數。 如有需要,數位會以左邊的零填補,以產生有效位數規範所指定的位數。

針對 BigInteger,正值一律有前置零,以區別其與負值。 這可確保剖析時輸出往返原始值。 例如,使用格式規範轉換的數位F是因為"X1"十六進位數位0F代表負值 F-1

結果字串不會受到目前 NumberFormatInfo 物件的格式化信息影響。

下列範例會使用十六進位格式規範來格式化 Int32 值。

int value;

value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E

value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15
Dim value As Integer

value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E

value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15

備註

本節包含使用標準數值格式字串的其他資訊。

控制面板設定

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

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

NumberFormatInfo 屬性

格式設定會受到目前 對象的屬性所影響,而目前 NumberFormatInfo 文化特性會隱含地提供,或是由 IFormatProvider 叫用格式化之方法的 參數明確提供。 NumberFormatInfo為該參數指定 或 CultureInfo 物件。

備註

如需自定義格式化數值中使用的模式或字串的相關信息,請參閱 NumberFormatInfo 類別主題。

整數和浮點數值類型

標準數值格式規範的某些描述是指整數或浮點數值類型。 整數數值類型為 Byte、、、SByteInt16Int32Int64UInt16UInt32UInt64BigInteger 浮點數值類型為Decimal、、 HalfSingleDouble

浮點無限和 NaN

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

程式代碼範例

下列範例會使用 en-US 文化特性和所有標準數值格式規範來格式化整數和浮點數值。 這個範例使用兩個特定的數值類型 (Double和 ),但會產生任何其他數值基底類型的類似結果(Int32、、 ByteSByteInt16Int32Int64UInt16UInt32UInt64BigIntegerDecimal和 )。HalfSingle

// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");

// Output floating point values
double floating = 10761.937554;
Console.WriteLine($"C: {floating.ToString("C", ci)}");           // Displays "C: $10,761.94"
Console.WriteLine($"E: {floating.ToString("E03", ci)}");         // Displays "E: 1.076E+004"
Console.WriteLine($"F: {floating.ToString("F04", ci)}");         // Displays "F: 10761.9376"
Console.WriteLine($"G: {floating.ToString("G", ci)}");           // Displays "G: 10761.937554"
Console.WriteLine($"N: {floating.ToString("N03", ci)}");         // Displays "N: 10,761.938"
Console.WriteLine($"P: {(floating/10000).ToString("P02", ci)}"); // Displays "P: 107.62 %"
Console.WriteLine($"R: {floating.ToString("R", ci)}");           // Displays "R: 10761.937554"
Console.WriteLine();

// Output integral values
int integral = 8395;
Console.WriteLine($"C: {integral.ToString("C", ci)}");           // Displays "C: $8,395.00"
Console.WriteLine($"D: {integral.ToString("D6", ci)}");          // Displays "D: 008395"
Console.WriteLine($"E: {integral.ToString("E03", ci)}");         // Displays "E: 8.395E+003"
Console.WriteLine($"F: {integral.ToString("F01", ci)}");         // Displays "F: 8395.0"
Console.WriteLine($"G: {integral.ToString("G", ci)}");           // Displays "G: 8395"
Console.WriteLine($"N: {integral.ToString("N01", ci)}");         // Displays "N: 8,395.0"
Console.WriteLine($"P: {(integral/10000.0).ToString("P02", ci)}"); // Displays "P: 83.95 %"
Console.WriteLine($"X: 0x{integral.ToString("X", ci)}");           // Displays "X: 0x20CB"
Console.WriteLine();
Option Strict On

Imports System.Globalization
Imports System.Threading

Module NumericFormats
    Public Sub Main()
        ' Display string representations of numbers for en-us culture
        Dim ci As New CultureInfo("en-us")

        ' Output floating point values
        Dim floating As Double = 10761.937554
        Console.WriteLine("C: {0}", _
                floating.ToString("C", ci))           ' Displays "C: $10,761.94"
        Console.WriteLine("E: {0}", _
                floating.ToString("E03", ci))         ' Displays "E: 1.076E+004"
        Console.WriteLine("F: {0}", _
                floating.ToString("F04", ci))         ' Displays "F: 10761.9376"         
        Console.WriteLine("G: {0}", _
                floating.ToString("G", ci))           ' Displays "G: 10761.937554"
        Console.WriteLine("N: {0}", _
                floating.ToString("N03", ci))         ' Displays "N: 10,761.938"
        Console.WriteLine("P: {0}", _
                (floating / 10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
        Console.WriteLine("R: {0}", _
                floating.ToString("R", ci))           ' Displays "R: 10761.937554"            
        Console.WriteLine()

        ' Output integral values
        Dim integral As Integer = 8395
        Console.WriteLine("C: {0}", _
                integral.ToString("C", ci))           ' Displays "C: $8,395.00"
        Console.WriteLine("D: {0}", _
                integral.ToString("D6"))              ' Displays "D: 008395" 
        Console.WriteLine("E: {0}", _
                integral.ToString("E03", ci))         ' Displays "E: 8.395E+003"
        Console.WriteLine("F: {0}", _
                integral.ToString("F01", ci))         ' Displays "F: 8395.0"    
        Console.WriteLine("G: {0}", _
                integral.ToString("G", ci))           ' Displays "G: 8395"
        Console.WriteLine("N: {0}", _
                integral.ToString("N01", ci))         ' Displays "N: 8,395.0"
        Console.WriteLine("P: {0}", _
                (integral / 10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
        Console.WriteLine("X: 0x{0}", _
                integral.ToString("X", ci))           ' Displays "X: 0x20CB"
        Console.WriteLine()
    End Sub
End Module

另請參閱