C# string Format示例

iDotNetSpace發表於2009-01-16

C#格式化數值結果表

字元

說明

示例

輸出

C 貨幣 string.Format("{0:C3}", 2) $2.000
D 十進位制 string.Format("{0:D3}", 2) 002
E 科學計數法 1.20E+001 1.20E+001
G 常規 string.Format("{0:G}", 2) 2
N 用分號隔開的數字 string.Format("{0:N}", 250000) 250,000.00
X 十六進位制 string.Format("{0:X000}", 12) C


string.Format("{0:000.000}", 12.2) 012.200

Strings

There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call.

 

Sample Generates
String.Format("->{1,10} -> Hello
String.Format("->{1,-10} ->Hello

Numbers

Basic number formatting specifiers:

 

Specifier Type Format

Output
(Passed
Double 1.42)

Output
(Passed
Int -12400)

c Currency {0:c} $1.42 -$12,400
d Decimal (Whole number) {0:d} System.
FormatException
-12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.
FormatException
x Hexadecimal {0:x4} System.
FormatException
cf90

Custom number formatting:

 

Specifier Type Example Output (Passed Double 1500.42) Note
0 Zero placeholder {0:00.0000} 1500.4200 Pads with zeroes.
# Digit placeholder {0:(#).##} (1500).42
. Decimal point {0:0.0} 1500.4
, Thousand separator {0:0,0} 1,500 Must be between two zeroes.
,. Number scaling {0:0,.} 2 Comma adjacent to Period scales by 1000.
% Percent {0:0%} 150042% Multiplies by 100, adds % sign.
e Exponent placeholder {0:00e+0} 15e+2 Many exponent formats available.
; Group separator see below

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.

 

Specifier Type Example (Passed System.DateTime.Now)
d Short date 10/12/2002
D Long date December 10, 2002
t Short time 10:11 PM
T Long time 10:11:29 PM
f Full date & time December 10, 2002 10:11 PM
F Full date & time (long) December 10, 2002 10:11:29 PM
g Default date & time 10/12/2002 10:11 PM
G Default date & time (long) 10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string 2002-12-10T22:11:29
u Universal sortable, local time 2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002

The 'U' specifier seems broken; that string certainly isn't sortable.

Custom date formatting:

 

Specifier Type Example Example Output
dd Day {0:dd} 10
ddd Day name {0:ddd} Tue
dddd Full day name {0:dddd} Tuesday
f, ff, ... Second fractions {0:fff} 932
gg, ... Era {0:gg} A.D.
hh 2 digit hour {0:hh} 10
HH 2 digit hour, 24hr format {0:HH} 22
mm Minute 00-59 {0:mm} 38
MM Month 01-12 {0:MM} 12
MMM Month abbreviation {0:MMM} Dec
MMMM Full month name {0:MMMM} December
ss Seconds 00-59 {0:ss} 46
tt AM or PM {0:tt} PM
yy Year, 2 digits {0:yy} 02
yyyy Year {0:yyyy} 2002
zz Timezone offset, 2 digits {0:zz} -05
zzz Full timezone offset {0:zzz} -05:00
: Separator {0:hh:mm:ss} 10:43:20
/ Separator {0:dd/MM/yyyy} 10/12/2002

Enumerations

 

Specifier Type
g Default (Flag names if available, otherwise decimal)
f Flags always
d Integer always
x Eight digit hex.

Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.

String.Format("{0:(###) ###-####}", 18005551212);

This will output "(800) 555-1212".

 

變數.ToString()


字元型轉換 轉為字串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16進位制)
12345.ToString("p"); //生成 1,234,500.00%

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

下表描述了用來格式化 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”的字串),數字被舍入為與小數點右邊的數字佔位符數目相同的小數位數。如果格式字串不包含小數點,數字被舍入為最接近的整數。如果數字位數多於小數點左邊數字佔位符的個數,多餘的數字被複制到輸出字串中緊挨著第一個數字佔位符的前面。
可以根據值為正、為負還是為零來為字串應用不同的格式化。為產生這種行為,自定義格式字串可以包含最多三個用分號分隔的部分:
一個部分:格式字串應用於所有值。
兩個部分:第一部分應用於正值和零,第二部分應用於負值。如果要格式化的數字為負,但根據第二部分中的格式舍入後為零,則最終的零根據第一部分進行格式化。
三個部分:第一部分應用於正值,第二部分應用於負值,第三部分應用於零。第二部分可能為空(分號間沒有任何內容),在這種情況下,第一部分應用於所有非零值。如果要格式化的數字為非零值,但根據第一部分或第二部分中的格式舍入後為零,則最終的零根據第三部分進行格式化。
格式化最終值時,此型別的格式化忽略所有先前存在的與數字關聯的格式化。例如,使用部分分隔符時,顯示的負值永遠不帶負號。如果您希望格式化後的最終值帶有負號,則應明確包含負號,讓它作為自定義格式說明符的組成部分。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-539835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章