分享
 
 
 

Format函数

王朝百科·作者佚名  2010-06-13
窄屏简体版  字體: |||超大  

VC++中Format函数详解

首先看它的声明: 

function Format(const Format: string; const Args: array of const): string; overload; 

事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的, 

但并不多用,所以这里只对第一个介绍: 

function Format(const Format: string; const Args: array of const): string; overload; 

Format参数是一个格式字符串,用于格式化Args里面的值的。Args又是什么呢, 

它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。 

如以下例子: 

Format("my name is %6s","wind"); 

返回后就是 

my name is wind 

现在来看Format参数的详细情况: 

Format里面可以写普通的字符串,比如"my name is" 

但有些格式指令字符具有特殊意义,比如"%6s" 

格式指令具有以下的形式: 

"%" [index ":"] ["-"] [width] ["." prec] type 

它是以"%"开始,而以type结束,type表示一个具体的类型。中间是用来 

格式化type类型的指令字符,是可选的。 

先来看看type,type可以是以下字符: 

d 十制数,表示一个整型值 

u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时 

是一个2的32次方减去这个绝对值的数 

如:Format("this is %u",-2); 

返回的是:this is 4294967294 

f 对应浮点数 

e 科学表示法,对应整型数和浮点数, 

比如Format("this is %e",-2.22); 

返回的是:this is -2.220000E+000 

等一下再说明如果将数的精度缩小 

g 这个只能对应浮点型,且它会将值中多余的数去掉 

比如Format("this is %g",02.200); 

返回的是:this is 2.2 

n 只能对应浮点型,将值转化为号码的形式。看一个例子就明白了 

Format("this is %n",4552.2176); 

返回的是this is 4,552.22 

注意有两点,一是只表示到小数后两位,等一下说怎么消除这种情况 

二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的 

m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化 

另外它只对应于浮点值 

Format("this is %m",9552.21); 

返回:this is ¥9,552.21 

p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示 

例如: 

Format("this is %p",p); 

Edit1的内容是:this is 0012F548 

s 对应字符串类型,不用多说了吧 

x 必须是一个整形值,以十六进制的形式返回 

Format("this is %X",15); 

返回是:this is F 

类型讲述完毕,下面介绍格式化Type的指令: 

[index ":"] 这个要怎么表达呢,看一个例子 

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 

现在明白了吗,[index ":"] 中的index指示Args中参数显示的 

顺序 

还有一种情况,如果这样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.22000000000000E+000 

怎么去掉多余的0呢,这个就行啦 

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来支配的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有