使用C#格式化字符串
如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Libr ary(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对S tring.Format方法肯定很熟悉。在C#中也经常使用这个方法来格式化字符串,比如下面这样:
在我的机器上,可以得到下面的输出:
item16sellsat¥3.57
也许你的机器上的输出和这个不太一样。这是正常的,本文稍后就会解释这个问题。
在我们日常使用中,更多的是使用Console.WriteLine方法来输出一个字符串。其实String.Format和C onsole.WriteLine有很多共同点。两个方法都有很多重载的格式并且采用无固定参数的对象数组作为最后一个参数。下面的两个语句会产生同样的输出。
输出如下:
Hello12345.67TrueQ45678
Hello12345.67TrueQ45678
2 字符串格式
String.Format和WriteLine都遵守同样的格式化规则。格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在这个格式中:
1)N是从0开始的整数,表示要格式化的参数的个数
2)M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的
3)formatString是另外一个可选的参数,表示格式代码
argN表示要格式化的表达式,和N是对应的。
如果argN是空值,那么就用一个空字符串来代替。如果没有formatString,那么就用参数N对应的ToStr ing方法来格式化。下面的语句会产生同样的输出:
输出是:
123
日期字符串是什么
123
123
也可以通过String.Format得到同样的输出。
因此有如下结论:
(,M)决定了格式化字符串的宽度和对齐方向
(:formatString)决定了如何格式化数据,比如用货币符号,科学计数法或者16进制。就像下面这样:
输出是
123456
123456
也可以合并这些表达式,先放一个逗号,再放一个冒号。就像这样:
Console.WriteLine("{0,-10:D6}{1,-10:D6}",123,456);
输出是:
000123000456
我们可以用这种格式化特性来对齐我们的输出。
输出是:
Name Salary
----------------
Bill123456
Polly7890
3 格式化标识符
标准的数学格式字符串用于返回通常使用的字符串。它们通常象X0这样的格式。X是格式化标识符,0是精度标识符。格式标识符号共有9种,它们代表了大多数常用的数字格式。就像下表所示:
字母含义
C或
Currency 货币格式
c
D或Decimal 十进制格式(十进制整数,不要和.Net的Decimal数据类型混淆了)
d
E或
e
Exponent 指数格式
F或f Fixed point 固定精度格式
G或
g
General 常用格式
N或
n
用逗号分割千位的数字,比如1234将会被变成1,234 P或
p
Percentage 百分符号格式
R或r
Round-trip圆整(只用于浮点数)保证一个数字被转化成字符串以后可以再被转回成同样的数字
X或
x
Hex 16进制格式
如果我们使用下面的表达方式,让我们看看会发生什么
精度控制标识控制了有效数字的个数或者十进制数小数的位数。
Console.WriteLine("{0:C5}",i);//¥123,456.00
Console.WriteLine("{0:D5}",i);//123456
Console.WriteLine("{0:E5}",i);//1.23456E+005
Console.WriteLine("{0:F5}",i);//123456.00000
Console.WriteLine("{0:G5}",i);//1.23456E5
Console.WriteLine("{0:N5}",i);//123,456.00000
Console.WriteLine("{0:P5}",i);//12,345,600.00000%
Console.WriteLine("{0:X5}",i);//1E240
R(圆整)格式仅仅对浮点数有效。这个值首先会用通用格式来格式化。对于双精度数有15位精度,对于单精度数有7位精度。如果这个值可以被正确地解析回原始的数字,就会用通用格式符来格式化。如果不能解析回去的话,那么就会用17位精度来格式化双精度数,用9位精度来格式化单精度数。尽管我们可以在圆整标识符后面添加有效数字的位数,但是它会被忽略掉。
如果标准格式化标识符还不能满足你。你可以使用图形化格式字符串来创建定制的字符串输出。图形化格式化使用占位符来表示最小位数,
最大位数,定位符号,负号的外观以及其它数字符号的外观。就像下表所示

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。