简介
在编写C#程序的过程中经常需要输出特定格式的字符串,因此要对需要输出的对象进行格式化。
正文
每个对象都有一个ToString()方法用来返回这个对象的字符串形式的呈现。
ToString()方法能接收一个字符串参数,告诉对象怎样格式化它自己。
String.Format的调用中,格式化字符串放在后面的位置,例如“{0:##}”。大括号里的文本是{index[,alignment][:formatString]}。如果alignment是正的,则文本在给出文本空间中右对齐。如果alignment是负的,则左对齐。
1. 字符串Strings
Sample | Generates |
---|---|
String.Format(”->{1,10}<-”, “Hello”); | -> Hello<- |
String.Format(”->{1,-10}<-”, “Hello”); | ->Hello <- |
2. 数值Numbers
基本数字格式说明符:
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 |
自定义数值格式:
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 |
在格式化货币值时,如果要求负数值放在圆括号里,则分号非常有用。货币值格式化的例子在本文的底部说明。
3. 日期Dates
记住日期的格式化尤其依赖于系统的区域设置;下面的示例字符串来自我的本地区域设置。
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 |
“U”说明符看起来像损坏似得,这个字符串肯定不能排序的。
自定义日期格式:
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 |
4. 枚举Numerations
Specifier | Type | 翻译 |
---|---|---|
g | Default (Flag names if available, otherwise decimal) | 默认(如果能获得枚举标志名,则返回标志名,否则返回十进制数 |
f | Flags always | 总是返回枚举标志名 |
d | Integer always | 总是返回整型 |
x | Eight digit hex. | 总是返回八位的十六进制数 |
5. 一些有用的示例
String.Format(”{0:$#,##0.00;($#,##0.00);Zero}”, value);
上面代码如果传入1243.50将输出 “$1,240.00″ 。如果传入负数,则输出相同的格式,不同的是带括号。如果传入0则输出0.
String.Format(”{0:(###) ###-####}”, 8005551212);
上面代码将输出 “(800) 555-1212″.
6. ToString的用法如下
字符串格式符号 | 说明 | 代码示例 | 输出 |
---|---|---|---|
C | 货币 | 2.5.ToString(“C”) | ¥2.50 |
D | 十进制 | 25.ToString(“D5”) | 00025 |
E | 科学计数法 | 25000.ToString(“E”) | 2.500000E+005 |
F | 固定小数点位数 | 25.ToString(“F2”) | 25.00 |
G | 常规 | 2.5.ToString(“G”) | 2.5 |
N | 数值 | 2500000.ToString(“N”) | 2,500,000.00 |
X | 十六进制 | 255.ToString(“X”) | FF |