C# 格式化字串 String.Format (推薦)

來源:互聯網
上載者:User
C# 格式化字串 String.Format

格式化日期和數位字串經常要用到這個, 就把協助裡面的東西大概整理了一些列在這裡了.

下表描述了用來格式化 DateTime 對象的標準格式說明符。
格式說明符 名稱 說明
d 短日期模式 顯示由與當前線程關聯的 DateTimeFormatInfo.ShortDatePattern 屬性定義的模式或者由指定格式提供者定義的模式。
D 長日期模式 顯示由與當前線程關聯的 DateTimeFormatInfo.LongDatePattern 屬性定義的模式或者由指定格式提供者定義的模式。
t 短時間模式 顯示由與當前線程關聯的 DateTimeFormatInfo.ShortTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。
T 長時間模式 顯示由與當前線程關聯的 DateTimeFormatInfo.LongTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。
f 完整日期/時間模式(短時間) 顯示長日期和短時間模式的組合,由空格分隔。
F 完整日期/時間模式(長時間) 顯示由與當前線程關聯的 DateTimeFormatInfo.FullDateTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。
g 常規日期/時間模式(短時間) 顯示短日期和短時間模式的組合,由空格分隔。
G 常規日期/時間模式(長時間) 顯示短日期和長時間模式的組合,由空格分隔。
M 或 m 月日模式 顯示由與當前線程關聯的 DateTimeFormatInfo.MonthDayPattern 屬性定義的模式或者由指定格式提供者定義的模式。
R 或 r RFC1123 模式 顯示由與當前線程關聯的 DateTimeFormatInfo.RFC1123Pattern 屬性定義的模式或者由指定格式提供者定義的模式。這是定義的標準,並且屬性是唯讀;因此,無論所使用的地區性或所提供的格式提供者是什麼,它總是相同的。屬性引用 CultureInfo.InvariantCulture 屬性並遵照自訂模式“ddd, dd MMM yyyy HH:mm:ss G\MT”。請注意,“GMT”中的“M”需要轉義符,因此它不被解釋。格式化並不修改 DateTime 的值,所以您必須在格式化之前將值調整為 GMT。
s 可排序的日期/時間模式;符合 ISO 8601 顯示由與當前線程關聯的 DateTimeFormatInfo.SortableDateTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。屬性引用 CultureInfo.InvariantCulture 屬性,格式遵照自訂模式“yyyy-MM-ddTHH:mm:ss”。
u 通用的可排序日期/時間模式 顯示由與當前線程關聯的 DateTimeFormatInfo.UniversalSortableDateTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。因為它是定義的標準,並且屬性是唯讀,因此無論地區性或格式提供者是什麼,模式總是相同的。格式化遵照自訂模式“yyyy-MM-dd HH:mm:ssZ”。格式化日期和時間時不進行時區轉換;所以,請在使用格式說明符之前將本地日期和時間轉換為通用時間。
U 通用的可排序日期/時間模式 顯示由與當前線程關聯的 DateTimeFormatInfo.FullDateTimePattern 屬性定義的模式或者由指定格式提供者定義的模式。請注意,顯示的時間是通用時間,而不是本地時間。
Y 或 y 年月模式 顯示由與當前線程關聯的 DateTimeFormatInfo.YearMonthPattern 屬性定義的模式或者由指定格式提供者定義的模式。
任何其他單個字元 未知說明符

下表描述了標準數字格式字串。請注意,這些格式說明符產生的輸出字串受“地區選項”控制台中的設定的影響。使用不同設定的電腦會產生不同的輸出字串。

格式說明符 名稱 說明
C 或 c 貨幣 數字轉換為表示貨幣金額的字串。轉換由用于格式化數位 NumberFormatInfo 對象的貨幣格式資訊控制。有效位數規範指示所需的小數位元。如果省略有效位數規範,則使用 NumberFormatInfo 給定的預設貨幣精度。
D 或 d 十進位 只有整型才支援此格式。數字轉換為十進位數字 (0-9) 的字串,如果數字為負,則前面加負號。有效位數規範指示結果字串中所需的最少數字個數。如果需要的話,則用零填充該數位左側,以產生有效位數規範給定的數字個數。
E 或 e 科學計數法(指數) 數字轉換為“-d.ddd...E+ddd”或“-d.ddd...e+ddd”形式的字串,其中每個“d”表示一個數字 (0-9)。如果該數字為負,則該字串以減號開頭。小數點前總有一個數字。有效位數規範指示小數點後所需的位元。如果省略有效位數規範,則使用預設值,即小數點後六位元字。格式說明符的大小寫指示在指數前加首碼“E”還是“e”。指數總是由正號或負號以及最少三位元字組成。如果需要,用零填充指數以滿足最少三位元字的要求。
F 或 f 固定點 數字轉換為“-ddd.ddd...”形式的字串,其中每個“d”表示一個數字 (0-9)。如果該數字為負,則該字串以減號開頭。有效位數規範指示所需的小數位元。如果忽略有效位數規範,則使用 NumberFormatInfo 給定的預設數值精度。
G 或 g 常規 根據數字類型以及是否存在有效位數規範,數字會轉換為固定點或科學記號標記法的最緊湊形式。如果有效位數規範被省略或為零,則數位類型決定預設精度,如下表所示。
Byte 或 SByte:3
Int16 或 UInt16:5
Int32 或 UInt32:10
Int64 或 UInt64:19
Single:7
Double:15
Decimal:29
如果用科學記號標記法表示數字時指數大於 -5 而且小於有效位數規範,則使用固定點標記法;否則使用科學記號標記法。如果要求有小數點,並且忽略尾部零,則結果包含小數點。如果有效位數規範存在,並且結果的有效數字位元超過指定精度,則通過舍入刪除多餘的尾部數字。使用科學記號標記法時,如果格式說明符是“G”,結果的指數帶首碼“E”;如果格式說明符是“g”,結果的指數帶首碼“e”。

上述規則有一個例外:如果數字是 Decimal 而且省略有效位數規範時。在這種情況下總使用固定點標記法並保留尾部零。

N 或 n 數字 數字轉換為“-d,ddd,ddd.ddd...”格式的字串,其中每個“d”表示一個數字 (0-9)。如果該數字為負,則該字串以減號開頭。小數點左邊每三個數字之間插入一個千位分隔字元。有效位數規範指示所需的小數位元。如果忽略有效位數規範,則使用 NumberFormatInfo 給定的預設數值精度。
P 或 p 百分比 數字轉換為由 NumberFormatInfo.PercentNegativePattern 屬性或 NumberFormatInfo.PercentPositivePattern 屬性定義的、表示百分比的字串。如果數字為負,則產生的字串由 PercentNegativePattern 定義並以負號開頭。已轉換的數字乘以 100 以表示為百分比。有效位數規範指示所需的小數位元。如果省略有效位數規範,則使用 NumberFormatInfo 給定的預設數值精度。
R 或 r 往返過程 往返過程說明符保證轉換為字串的數值再次被分析為相同的數值。使用此說明符格式化數值時,首先用常規格式測試:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的數值,則使用常規格式說明符對其進行格式化。但是,如果此值未被成功地分析為相同的數值,則它這樣格式化:Double 使用 17 位精度,Single 使用 9 位精度。雖然有效位數規範可以追加到往返過程格式說明符,但它將被忽略。使用此說明符時,往返過程優先於精度。此格式僅受浮點型支援。
X 或 x 十六進位 數字轉換為十六進位數位字串。格式說明符的大小寫指示對大於 9 的十六進位數字使用大寫字元還是小寫字元。例如,使用“X”產生“ABCDEF”,使用“x”產生“abcdef”。有效位數規範指示結果字串中所需的最少數字個數。如果需要的話,則用零填充該數位左側,以產生有效位數規範給定的數字個數。只有整型才支援此格式。

如果標準數字格式說明符未提供所需的格式化類型,可以使用自訂格式字串進一步增強字串輸出。標準格式字串包含一個字母字元,後面可能會跟有數字序列(形成一個 0 到 99 的值);而所有其他格式字串都是自訂格式字串。
下表顯示可以用於建立自訂數字格式字串及其定義的字元。請注意,與當前線程關聯的 NumberFormatInfo 對象的“地區選項”控制台的設定會影響這些字元中的某些所產生的輸出字串。使用不同地區性的電腦將產生不同的輸出字串。
格式字元值說明
0零預留位置如果格式化的值在格式字串中出現“0”的位置有一個數字,則此數字被複製到輸出字串中。小數點前最左邊的“0”的位置和小數點後最右邊的“0”的位置確定總在輸出字串中出現的數字範圍。“00”說明符使得值被舍入到小數點前最近的數字,其中零位總被捨去。例如,用“00”格式化 34.5 將得到值 35。
#數字預留位置如果格式化的值在格式字串中出現“#”的位置有一個數字,則此數字被複製到輸出字串中。否則,輸出字串中的此位置不儲存任何值。請注意,如果“0”不是有效數字,此說明符永不顯示“0”字元,即使“0”是字串中唯一的數字。如果“0”是所顯示的數字中的有效數字,則顯示“0”字元。“##”格式字串使得值被舍入到小數點前最近的數字,其中零總被捨去。例如,用“##”格式化 34.5 將得到值 35。
.小數點格式字串中的第一個“.”字元確定格式化的值中的小數點分隔字元的位置;任何其他“.”字元被忽略。用作小數點分隔字元的實際字元由控制格式化的 NumberFormatInfo 的 NumberDecimalSeparator 屬性確定。
,千位分隔字元和數字比例換算“,”字元有兩種用途。首先,如果格式字串在小數點(如果有)左邊的兩個數字預留位置(0 或 #)之間包含“,”字元,則輸出將在小數點分隔字元左邊的每三個數字之間插入千位分隔字元。輸出字串中用作小數點分隔字元的實際字元由控制格式化的當前 NumberFormatInfo 的 NumberGroupSeparator 屬性確定。
其次,如果格式字串在緊鄰小數點的左側包含一個或多個“,”字元,則數字在格式化之前將被“,”字元數除然後乘以 1000。例如,格式字串“0,,”將 100,000,000 簡單表示為 100。使用“,”字元指示比例換算在格式化數字中不包括千位分隔字元。因此,若要將數字縮小 1,000,000 倍並插入千位分隔字元,應使用格式字串“#,##0,,”。
%百分比預留位置在格式字串中出現“%”字元將導致數字在格式化之前乘以 100。適當的符號插入到數字本身在格式字串中出現“%”的位置。使用的百分比字元由當前的 NumberFormatInfo 類確定。
E0
E+0
E-0
e0
e+0
e-0科學計數法如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一個字串出現在格式字串中,而且後面緊跟至少一個“0”字元,則數字用科學計數法來格式化,在數字和指數之間插入“E”或“e”。跟在科學計數法指示符後面的“0”字元數確定指數輸出的最小位元。“E+”和“e+”格式指示符號字元(正號或負號)應總是置於指數前面。“E”、“E-”、“e”或“e-”格式指示符號字元僅置於負指數前面。
\轉義符在 C# 和 C++ 的託管擴充中,反斜線字元使格式字串中的下一個字元被解釋為逸出序列。它與傳統的格式化序列一起使用,如“\n”(換行)。
在某些語言中,轉義符本身用作文本時必須跟在轉義符之後。否則,編譯器將該字元理解為轉義符。使用字串“\\”顯示“\”。
請注意,Visual Basic 中不支援此轉義符,但是 ControlChars 提供相同的功能。
'ABC'
"ABC"字串引在單引號或雙引號中的字元被原樣複製到輸出字串中,而且不影響格式化。
;部分分隔字元“;”字元用於分隔格式字串中的正數、負數和零各部分。
其他所有其他字元所有其他字元以文本形式複製到輸出字串中它們出現的位置。

請注意,對於固定點格式字串(不包含“E0”、“E+0”、“E-0”、“e0”、“e+0”或“e-0”的字串),數字被舍入為與小數點右邊的數字預留位置數目相同的小數位元。如果格式字串不包含小數點,數字被舍入為最接近的整數。如果數字位元多於小數點左邊數字預留位置的個數,多餘的數字被複製到輸出字串中緊挨著第一個數字預留位置的前面。
可以根據值為正、為負還是為零來為字串應用不同的格式化。為產生這種行為,自訂格式字串可以包含最多三個用分號分隔的部分:
一個部分:格式字串應用於所有值。
兩個部分:第一部分應用於正值和零,第二部分應用於負值。如果要格式化的數字為負,但根據第二部分中的格式舍入後為零,則最終的零根據第一部分進行格式化。
三個部分:第一部分應用於正值,第二部分應用於負值,第三部分應用於零。第二部分可能為空白(分號間沒有任何內容),在這種情況下,第一部分應用於所有非零值。如果要格式化的數字為非零值,但根據第一部分或第二部分中的格式舍入後為零,則最終的零根據第三部分進行格式化。
格式化最終值時,此類型的格式化忽略所有先前存在的與數字關聯的格式化。例如,使用部分分隔字元時,顯示的負值永遠不帶負號。如果您希望格式化後的最終值帶有負號,則應明確包含負號,讓它作為自訂格式說明符的組成部分。下面的樣本闡釋如何使用部分分隔字元產生格式化字串。
[Visual Basic]
Dim MyPos As Double = 19.95

Dim MyNeg As Double = -19.95

Dim MyZero As Double = 0

Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
[C#]
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
下面的樣本說明自訂數字格式化。
[Visual Basic]
Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number " + ControlChars.Lf + "= #" )
' In the U.S. English culture, MyString has the value:
' "My Number
' = 42".
[C#]
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int MyInt = 42;
MyString = MyInt.ToString( "My Number \n= #" );
// In the U.S. English culture, MyString has the value:
// "My Number
// = 42".

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.