标题：Format函数
VC++中Format函数详解
函数说明Format是CString类的一个成员函数，它通过格式操作使任意类型的数据转换成一个字符串。函数声明function Format(const Format: string; const Args: array of const): string; overload;函数功能事实上Format方法有两种形式，另外一种是三个参数的，主要区别在于它是线程安全的， 但并不多用，所以这里只对第一个介绍。Format参数是一个格式字符串，用于格式化Args里面的值的。Args是一个变量数组，即它里面可以有多个参数，而且每个参数可以不同。 例如： 
Format("my name is %6s","wind"); 
返回的是：my name is wind函数参数Format里面可以写普通的字符串，比如"my name is" ，但有些格式指令字符具有特殊意义，比如"%6s" 
格式指令具有以下的形式： "%" [index ":"] ["-"] [width] ["." prec] type
它是以"%"开始,而以type结束，type表示一个具体的类型。中间是用来格式化type类型的指令字符，是可选的。各个参数的含义与用途如下；
[type]
type参数可选的类型有d，u，f，e，g，n，m，p，s，x.
1) d 十进制数，表示一个整型值，u 和d一样是整型值，但它是无符号的，而如果它对应的值是负的，则返回时是一个2的32次方减去这个负数的绝对值。
例如：Format("this is %u",-2);
返回的是：this is 4294967294 
2）f 对应浮点数 
3）e科学表示法，对应整型数和浮点数
例如：Format("this is %e",-2.22);
返回的是：this is -2.220000E+000 
4）g 这个只能对应浮点型，且它会将值中多余的数去掉 
例如：Format("this is %g",02.200);
返回的是：this is 2.2 
5）n 只能对应浮点型，将值转化为号码的形式，看一个例子就明白了 
例如：Format("this is %n",4552.2176);
返回的是：this is 4,552.22 
注意：一是，只表示到小数后两位
二是，即使小数没有被截断，它也不会也像整数部分一样有逗号来分开的 
6）m 钱币类型，但关于货币类型有更好的格式化方法，这里只是简单的格式化，另外它只对应于浮点值 
例如：Format("this is %m",9552.21);
返回的是：this is ￥9,552.21 
7）p 对应于指针类型，返回的值是指针的地址，以十六进制的形式来表示 
例如： Format("this is %p",p);
返回的是：this is 0012F548 
8）s 对应字符串类型
9）x 必须是一个整形值，以十六进制的形式返回 
例如：Format("this is %X",15); 
返回的是：this is F 
下面介绍格式化Type的指令：
[index ":"] ：index指示Args中参数显示的顺序 。
例如：Format("this is %d %d",12,13);
其中第一个%d的索引是0，第二个%d是1，所以字符显示的时候，是这样：this is 12 13 
若定义为：Format("this is %1:d %0:d",12,13); 
那么返回的字符串就变成了：this is 13 12 
若定义为：Format("%d %d %d %0:d %d", 1, 2, 3, 4) ;
那么将返回的是：1 2 3 1 2
若想返回的是1 2 3 1 4，必须这样定义：Format("%d %d %d %0:d %3:d", 1, 2, 3, 4) ;
注意：索引不能超出Args中的个数，不然会引起异常。
例如：Format("this is %2:d %0:d",12,13); 
由于Args中只有12 13 两个数，所以Index只能是0或1，这里为2就错了 。
[width] ：指定将被格式化的值占的宽度。
例如：Format("this is %4d",12);
返回的是：this is 12 
如果Width的值小于参数的长度，则没有效果。 
例如：Format("this is %1d",12); 
返回的是：this is 12 
["-"] ：这个指定参数向左对齐，和[width]合在一起最可以看到效果。
例如：Format("this is %-4d,yes",12); 
返回的是：this is 12 ,yes 
["." prec] ：指定精度，对于浮点数效果最佳。
例如：Format('this is %.2f,1.1234);
返回的是： this is 1.12 
又如：Format('this is %.7f,1.1234);
返回的是： this is 1.1234000 
而对于整型数，如果prec比如整型的位数小，则没有效果，反之比整形值的位数大，则会在整型值的前面以0补之。
例如：Format('this is %.7d,1234);
返回的是：this is 0001234
对于字符型，刚好和整型值相反，如果prec比字符串型的长度大，则没有效果，反之比字符串型的长度小，则会截断尾部的字符。
例如：Format('this is %.2s,1234);
返回的是：this is 12 
之前说过的例子：Format("this is %e",-2.22);
返回的是：this is -2.220000E+000 
若这样：Format('this is %.2e',[-2.22]); 就可以解决了！
FormatDateTime的用法
他的声明为： 
function FormatDateTime(const Format: string; DateTime: TDateTime): string; 
overload; 
当然和Format一样还有一种，但这里只介绍常用的第一种 
Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的 
字符串 
重点来看Format参数中的指令字符 
c 以短时间格式显示时间，即全部是数字的表示 
FormatdateTime('c',now); 
输出为：2004-8-7 9:55:40 
d 对应于时间中的日期，日期是一位则显示一位，两位则显示两位 
FormatdateTime('d',now); 
输出可能为1～31 
dd 和d的意义一样，但它始终是以两位来显示的 
FormatdateTime('dd',now); 
输出可能为01～31 
ddd 显示的是星期几 
FormatdateTime('ddd',now); 
输出为: 星期六 
dddd 和ddd显示的是一样的。 
但上面两个如果在其他国家可能不一样。 
ddddd 以短时间格式显示年月日 
FormatdateTime('ddddd',now); 
输出为：2004-8-7 
dddddd 以长时间格式显示年月日 
FormatdateTime('dddddd',now); 
输出为：2004年8月7日 
e/ee/eee/eeee 以相应的位数显示年 
FormatdateTime('ee',now); 
输出为：04 （表示04年） 
m/mm/mmm/mmmm 表示月 
FormatdateTime('m',now); 
输出为：8 
FormatdateTime('mm',now); 
输出为 08 
FormatdateTime('mmm',now); 
输出为 八月 
FormatdateTime('mmmm',now); 
输出为 八月 
和ddd/dddd 一样，在其他国家可能不同 
yy/yyyy 表示年 
FormatdateTime('yy',now); 
输出为 04 
FormatdateTime('yyyy',now); 
输出为 2004 
h/hh,n/nn,s/ss,z/zzz 分别表示小时，分，秒,毫秒 
t 以短时间格式显示时间 
FormatdateTime('t',now); 
输出为 10:17 
tt 以长时间格式显示时间 
FormatdateTime('tt',now); 
输出为10:18:46 
ampm 以长时间格式显示上午还是下午 
FormatdateTime('ttampm',now); 
输出为：10:22:57上午 
大概如此，如果要在Format中加普通的字符串，可以用双引号隔开那些 
特定义的字符，这样普通字符串中如果含特殊的字符就不会被显示为 
时间格式啦： 
FormatdateTime('"today is" c',now); 
输出为：today is 2004-8-7 10:26:58 
时间中也可以加"-"或""来分开日期： 
FormatdateTime('"today is" yy-mm-dd',now); 
FormatdateTime('"today is" yymmdd',now); 
输出为： today is 04-08-07 
也可以用":"来分开时间 
FormatdateTime('"today is" hh:nn:ss',now); 
输出为：today is 10:32:23
FormatFloat的用法
常用的声明： 
function FormatFloat(const Format: string; Value: Extended): string; overload; 
和上面一样Format参数为格式化指令字符，Value为Extended类型 
为什么是这个类型，因为它是所有浮点值中表示范围最大的，如果传入该方法的参数 
比如Double或者其他，则可以保存不会超出范围。 
关键是看Format参数的用法 
0 这个指定相应的位数的指令。 
比如：FormatFloat('000.000',22.22); 
输出的就是022.220 
注意一点，如果整数部分的0的个数小于Value参数中整数的位数，则没有效果 
如：FormatFloat('0.00',22.22); 
输出的是：22.22 
但如果小数部分的0小于Value中小数的倍数，则会截去相应的小数和位数 
如：FormatFloat('0.0',22.22); 
输出的是：22.2 
也可以在整数0中指定逗号，这个整数位数必须大于3个，才会有逗号出句 
FormatFloat('0,000.0',2222.22); 
输出是：2,222.2 
如果这样FormatFloat('000,0.0',2222.22); 
它的输出还是：2,222.2 
注意它的规律 
# 和0的用法一样，目前我还没有测出有什么不同。 
FormatFloat('##.##',22.22); 
输出是：22.00 
E 科学表示法，看几个例子大概就明白了 
FormatFloat('0.00E+00',2222.22); 
输出是 2.22E+03 
FormatFloat('0000.00E+00',2222.22); 
输出是 2222.22E+00 
FormatFloat('00.0E+0',2222.22); 
22.2E+2 
明白了吗，全靠E右边的0来支配的。
vb中的format函数
返回 Variant (String)，其中含有一个表达式，它是根据格式表达式中的指令来格式化的。
语法
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
Format 函数的语法具有下面几个部分：
部分说明expression必要参数。任何有效的表达式。format可选参数。有效的命名表达式或用户自定义格式表达式。firstdayofweek可选参数。常数，表示一星期的第一天。firstweekofyear可选参数。常数，表示一年的第一周。设置值
firstdayofweek参数有下面设置：
常数值说明vbUseSystem0使用 NLS API 设置。VbSunday1星期日（缺省）vbMonday2星期一vbTuesday3星期二vbWednesday4星期三vbThursday5星期四vbFriday6星期五vbSaturday7星期六firstweekofyear 参数有下面设置：
常数值说明vbUseSystem0使用 NLS API 设置。vbFirstJan11从包含一月一日的那一周开始（缺省）。vbFirstFourDays2从本年第一周开始，而此周至少有四天在本年中。VbFirstFullWeek3从本年第一周开始，而此周完全在本年中。说明
格式化作法数字使用预先定义的命名数值格式或创建用户自定义数值格式。日期和时间使用预先定义的命名日期/时间格式或创建用户自定义日期/时间格式。日期和时间序数使用日期和时间格式或数值格式。字符串创建自定义的字符串格式。如果在格式化数字时没有指定 format，Format 会提供与 Str 函数类似的功能，尽管它是国际化的。然而，以 Format 作用在正数上不会保留正负号空间，而以 Str 的话则会。
如果要格式化一个没有本地化的数值字符串，应该使用一个用户自定义的数值格式，以保证得到需要的外观。
注意 如果 Calendar 属性设置是Gregorian ，并且format 指定了日期格式，那么，提供的 expression 必须是Gregorian 。如果Visual Basic Calendar 属性设置是 Hijri，则提供的的 expression 必须是Hijri 。
如果日历是Gregorian，则 format 表达式的意义没有改变。如果日历是Hijri ，则所有的日期格式符号（例如，dddd, mmmm, yyyy ）有相同的意义，这些意义只应用于Hijri 日历。格式符号保持英文，用于文本显示的符号（例如，AM 和PM ）显示与该符号有关的字符串（英文或阿拉伯数字）。当日历是Hijri 时，一些符号的范围会改变。
符号范围d 1-30 dd 1-30 ww 1-51 mmm 显示完整的月份名称（Hijri 月份名称无缩写形式） y 1-355 yyyy 100-9666 
Format 函数示例
本示例显示用 Format 函数做格式化输出的不同用法。对于日期分隔号（/），时间分隔号（:），以及 AM/ PM 等文本而言，其真正的显示格式会因计算机上的国际标准不同而有所差异。在开发阶段，日期与时间是以短日期的格式，配合代码的国际标准来显示的。而在运行时，短日期则是根据系统的国际标准而定，而系统的国际标准和代码的国际标准可能并不相同。本示例中是假设国际标准为 English/United States。
MyTime 及 MyDate 在开发环境下，使用系统的短日期设置显示出来的。
Dim MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#
' 以系统设置的长时间格式返回当前系统时间。
MyStr = Format(Time, "Long Time")
' 以系统设置的长日期格式返回当前系统日期。
MyStr = Format(Date, "Long Date")
MyStr = Format(MyTime, "h:m:s") ' 返回 "17:4:23"。
MyStr = Format(MyTime, "hh:mm:ss AMPM") ' 返回 "05:04:23 PM"。
MyStr = Format(MyDate, "dddd, mmm d yyyy") ' 返回 "Wednesday, Jan 27 1993"。
' 如果没有指定格式，则返回字符串。
MyStr = Format(23) ' 返回 "23"。
' 用户自定义的格式。
MyStr = Format(5459.4, "##,##0。00") ' 返回 "5,459.40"。
MyStr = Format(334。9, "###0。00") ' 返回 "334.90"。
MyStr = Format(5, "0。00%") ' 返回 "500.00%"。
MyStr = Format("HELLO", "<") ' 返回 "hello"。
MyStr = Format("This is it", ">") ' 返回 "THIS IS IT"。