CString::Format()函数用法解析

来源:互联网 发布:贤友板材优化软件 编辑:程序博客网 时间:2024/05/01 04:29

我在编写程序时经常会使用CString::Format()来格式化字符串!但往往只是使用了Format很少一部分功能,比如整型转换成字符串!不过今天我想将磁盘空间使用率输出到静态文本进行显示,需要用到指定数据精度,这已经超出以前我对Format的了解了!也让我想要学习Format的完整功能!

 

下面是我对我从网上收集到的资料的整理:

 

函数声明

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

(事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,  
但并不多用,所以这里只对第一个介绍)

参数:

1、Format参数是一个格式字符串,用于格式化Args里面的值的。格式字符串中包含了一个或多个以%字符开始的格式指令,我们通过这些格式指令来编译器如何对Args里面的值进行格式!以下是不同类型数据的格式方式%号后的说明: (后面会举例说明各格式命令)

d输出带符号十进制数
o输出无符号八进制数 
x输出无符号十六进制数 
u输出无符号数 
c输出单个字符 
s输出一串字符 
f输出实数(6位小数) 
e以指数形式输出实数 
g选用f与e格式中输出宽度较小的格式,不输出0 
ld输入输出long型数据 
lf输入输出double型数据 
m数据输出宽度为m 
.n输出小数位数为n

 

2、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);  
返回: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]);  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 把售后给的备用机摔坏了怎么办 苹果4s屏幕玻璃碎了怎么办 苹果手机摔鼓起来了屏幕花了怎么办 苹果8卡屏幕划不动了怎么办 苹果x卡屏幕划不动了怎么办 苹果5s解锁密码忘了怎么办 苹果6s屏幕摔碎了怎么办 苹果手机掉在水里了怎么办 乐视手机掉水里没法触屏了怎么办 乐视电视有声音但是黑屏怎么办 苹果手机微信语音有回音怎么办 苹果4s死机了没反应了怎么办 苹果手表的显示平坏了怎么办 苹果5s屏幕翘起来了怎么办 苹果手机圆点卡住屏幕不能动怎么办 苹果5s卡屏怎么也不动应该怎么办 苹果5s手机触摸屏太灵敏怎么办 苹果5s手机关机滑动失灵怎么办 苹果5s关机开机后没信号怎么办 苹果手机5s被弄关机了怎么办 华为荣耀5c换屏后触摸失灵怎么办 三星笔记本鼠标触摸板没反应怎么办 有米6x触摸屏不好使怎么办? 小米5s屏幕触摸没反应怎么办 苹果5s主屏幕设置没反应怎么办 华为畅享5s接听不灵怎么办 红米3s忘记锁屏密码怎么办 华为畅享5s手机打不开网络怎么办 苹果手机突然关机开不了机怎么办 苹果手机掉地上开不了机怎么办 oppo手机突然黑屏开不了机怎么办 苹果6s为什么开不了机怎么办 苹果手机还原出厂设置白苹果怎么办 捡到苹果6s手机怎么办才能自己用 苹果6s玩游戏卡住了怎么办 苹果6s进水换屏后指纹失灵怎么办 苹果手机6s声音按键失灵怎么办 苹果手机触屏失灵怎么办5s 苹果六摔了一下屏幕失灵怎么办 荣耀5c进水屏幕触摸屏失灵怎么办 生活玩家打不了风云蝙蝠岛怎么办啊