金在云吧:C#中的数字格式化、格式日期格式化

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 21:34:19

字符串格式化这部分内容是我们经常用到的,如“2008-03-26”日期格式、“28.20”数字格式。 
举一个例子,我们有时需要将订单号“12”显示为“00000012”这种样式(不足8位前面补0),就可以使用下面的方法:

int originalCode = 12; 
Response.Write(string.Format("{0:00000000}", originalCode)); 
或者

int originalCode = 12; 
Response.Write(originalCode.ToString("00000000")); 
又如我们在使用日期做为某种关键字时,比如图片的文件名,一般是到秒级,如“20080326082708”

Response.Write(DateTime.Now.ToString("yyyyMMddHHmmss")); // 输出:20080326082708 
这样如果并发操作比较多的话,就会产生文件重名的现象。我们可以将日期精确到1/10000000秒,这样的话重名的可能性就很小了。

Response.Write(DateTime.Now.ToString("yyyyMMddHHmmssfffffff"));// 输出:200803260827087983268 
==========================================================

格式 
基本内容是:可以在 Console.WriteLine(以及 String.Format,它被 Console.WriteLine 调用)中的格式字符串内的括号中放入非索引数字的内容。格式规范的完整形式如下:

{index [, width][:formatstring]}

其中,index 是此格式程序引用的格式字符串之后的参数,从零开始计数;width(如果有的话)是要设置格式的字段的宽度(以空格计)。width 取正数表示结果右对齐,取负数则意味着数字在字段中左对齐。(请参阅下面的前两个示例。)

formatstring 是可选项,其中包含有关设置类型格式的格式说明。如果对象实现 IFormattable,formatstring 就会传递给对象的 Format 方法(在 Beta 2 和后续版本中,该方法的签名变为 ToString(string, IFormatProvider),但功能不变)。如果对象不实现 IFormattable,就会调用 Object.ToString(),而忽略 formatstring。

另请注意,在 Beta 1 中不区分当前语言的 ToString 在 Beta 2 和后续版本中“将”区分语言。例如,对于用“.”分隔千位,用“,”分隔小数的国家,1,234.56 将会格式化成 1.234,56。如果您需要结果无论在什么语言下都是一样的,就请使用 CultureInfo.InvariantCulture 作为语言。

若要获取有关格式的完整信息,请查阅“.NET 框架开发人员指南”中的格式概述(英文)。

数字格式 
请注意,数字的格式是区分语言的:分隔符以及分隔符之间的空格,还有货币符号,都是由语言决定的 — 默认情况下,是您计算机上的默认语言。默认语言与执行线程相关,可以通过 Thread.CurrentThread.CurrentCulture 了解和设置语言。有几种方法,可以不必仅为一种给定的格式操作就立即更改语言。

内置类型的字母格式 
有一种格式命令以单个字母开头,表示下列设置:

G—常规,E 或 F 中较短的

F—浮点数,常规表示法

E—用 E 表示法表示的浮点数(其中,E 代表 10 的次幂)

N—带有分隔符的浮点数(在美国为逗号)

C—货币,带有货币符号和分隔符(在美国为逗号)

D—十进制数,仅用于整型

X—十六进制数,仅用于整型

字母可以后跟一个数字,根据字母的不同,该数字可以表示总位数、有效位数或小数点后面的位数。

下面是字母格式的一些示例:

double pi = Math.PI; 
double p0 = pi * 10000; 
int i = 123; 
Console.WriteLine("浮点格式,无分隔符(逗号)"); 
Console.WriteLine("pi, Left {0, -25}", pi); // 3.1415926535897931 
Console.WriteLine("p0, Rt. {0, 25}", p0); // 3.1415926535897931 
Console.WriteLine("pi, E {0, 25:E}", pi); // 3.1416E+000 
Console.WriteLine("使用 E 和 F 格式,小数点后保留 n(此处为 4)位"); 
Console.WriteLine("pi, E4 {0, 25:E4}", pi); // 3.1416E+000 
Console.WriteLine("pi, F4 {0, 25:F4}", pi); // 3.1416 
Console.WriteLine("使用 G 格式,保留 4 位有效数字——如果需要请使用 E 格式"); 
Console.WriteLine("pi, G4 {0, 25:G4}", pi); // 3.142 
Console.WriteLine("p0, G4 {0, 25:G4}", p0); // 3.142E4 
Console.WriteLine("N 和 C 格式带有逗号(分隔符)," + 
"默认小数点后保留两位,四舍五入。"); 
Console.WriteLine("p0, N {0, 25:N}", p0); // 31,415.93 
Console.WriteLine("p0, N4 {0, 25:N4}", p0); // 31,415.9265 
Console.WriteLine("p0, C {0,25:C}", pi); // $3.14 
Console.WriteLine("D 和 X 格式仅用于整型," + 
"非整型将产生格式异常——X 指十六进制"); 
Console.WriteLine("i, D {0, 25:D}", i ); // 123 
Console.WriteLine("i, D7 {0, 25:D7}", i ); // 0000123 
Console.WriteLine("i, X {0, 25:X}", i ); // 7B 
Console.WriteLine("i, X8 {0, 25:X8}", i ); // 0000007B

图片格式 
与字母格式不同,formatstring 可以包含“图片格式”。下面是从代码中摘录的几个实例。(这类似于 Basic 中的“Print Using”语句。)图片格式功能甚至包括以不同方式设置负数、正数和零的格式的能力。还有几个图片格式功能,下面的示例中未包括在内。有关详细信息,请参阅“.NET 框架开发人员指南”或文档中的主题图片格式数字串(英文)。

在下例中您将注意到,好心的博士既使用了“#”字符,又使用了“0”字符。如果相应的数字是前导零或尾随零,“#”字符就会替换为空值。无论相应数字的值如何,“0”字符都会被替换为零字符 — 因此,数字将会被零填补。句号(如果有的话)表示小数分隔符的位置。

那么,为什么要同时使用这些字母,比如“###0.##”? 如果要设置