【MFC】MFC中CString.Format的详细用法

参考来源: MFC中CString.Format的详细用法
来源作者: yumodev
来源地址: https://blog.csdn.net/wangkaishou/article/details/5846152

Format简介

首先看它的声明:
function Format(const Format: string; const Args: array of const): string; overload;
(事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍 )
Format 参数是一个格式字符串 string,用于格式化Args里面的值的。
Args是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。

如例子: str.Format(_T(“Hello %6s”), _T(“World”)); 返回后就是 Hello World
Format参数的详细情况:
Format里面可以写普通的字符串,比如 "Hello "
但有些格式指令字符具有特殊意义,比如 “%6s”

1、Format格式指令具的形式

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

它是以"%"开始,而以type结束,type表示一个具体的类型。中间是用来格式化type类型的指令字符,是可选的。

1.1、Format常用type字符:

type描述
c单个字符
d十进制整数(int)
ld十进制整数(long)
f十进制浮点数(float) 6位小数
lf十进制浮点数(double) 6位小数
e以指数形式输出实数
E以指数形式输出实数 e符号大写E表示
g选用f与e格式中输出宽度较小的格式,6位有效数字,会将多余的0删除
G选用f与e格式中输出宽度较小的格式,6位有效数字,会将多余的0删除 使用指数表示时 e符号大写E表示
n只能对应浮点型,将值转化为号码的形式,
X无符号十六进制数 用大写字母A,B,C,D,E,F来表示10到15之间的数
s字符串
u无符号十进制数
o无符号八进制数
x无符号十六进制数 用小写字母a,b,c,d,e,f来表示10到15之间的数
X无符号十六进制数 用大写字母A,B,C,D,E,F来表示10到15之间的数

1.2、[index “:”]

[index “:”] 中的index指示Args中参数显示的顺序

str.Format(_T("this is %d %d"),12,13); 

其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候是: this is 12 13

str.Format(_T("this is %1:d %0:d"),12,13);  

那么返回的字符串就变成了: this is 13 12

1.3、[width]

[width] 指定将被格式化的值占的宽度

str.Format(_T("this is %4d"),12);         //str="this is   12"     

如果Width的值小于参数的长度,则没有效果。

str.Format(_T("this is %1d"),12);              //str="this is 12"       

1.4、["-"]

["-"] 这个指定参数向左齐,在右侧补空格,和[width]合在一起最可以看到效果:

str.Format(_T("this is %-4d,yes"),12);     //str="this is 12  ,yes"  

1.5、["." prec]

["." prec] 指定精度,对于浮点数效果最佳

str.Format(_T("this is %.2f"), 1.1234);    //str="this is 1.12"
str.Format(_T("this is %.7f"), 1.1234);    //str="this is 1.1234000"

对于整型数,如果prec比如整型的位数小,则没有效果 反之比整形值的位数大,则会在整型值的前面以0补之

str.Format(_T("this is %.7d"), 1234);      //str="this is 0001234" 

结果与如下利用[width] 进行控制相同,这里%07中,写成%7则会在左侧补空格,%07则在左侧补0

str.Format(_T("this is %07d"), 1234);      //str="this is 0001234" 

对于字符型,刚好和整型值相反,如果prec比字符串型的长度大 则没有效果,反之比字符串型的长度小,则会截断尾部的字符

str.Format(_T("this is %.2s"), _T("1234"));      //str="this is 12" 

2、int、long 转 CString:

	int num = 1024;
	CString strNum;
	strNum.Format(_T("%d"),   num);    //strNum="1024"    数字转字符串
	strNum.Format(_T("%5d"),  num);    //strNum=" 1024"   5表示占用5位 不足5位高位补空格
	strNum.Format(_T("%05d"), num);    //strNum="01024"   5表示占用5位 0表示不足5位高位补0

long转换为CString的方法与上面相似,只需把%d改为%ld。

3、double转换为CString:

	float num = 10.24;
	CString strNum;
	
	strNum.Format(_T("%f"),   num);
	//strNum="10.240000"  数字转字符串,f为六位小数    
	  
	strNum.Format(_T("%.1f"), num); 
	 //strNum="10.2"      .1表示保留小数点后1位  多余部分四舍五入
	      
	strNum.Format(_T("%.4f"), num);  
	//strNum="10.2400"    .4表示保留小数点后4位  多余部分四舍五入
	     
	strNum.Format(_T("%8.4f"), num);  
	//strNum=" 10.2400"   字符串一共8位(包括小数点)不足8位整数高位补空格  .4表示保留小数点后4位  小数多余部分四舍五入
	    
	strNum.Format(_T("%08.4f"), num);  
	//strNum="010.2400"   字符串一共8位(包括小数点)不足8位整数高位补0     .4表示保留小数点后4位  小数多余部分四舍五入   

double转换为CString的方法与上面相似,将f%改为lf%就可以了。

4、将十进制数转换为八进制:

	int num = 1024;
	CString strNum;
	strNum.Format(_T("%o"), num);       //strNum="2000"
	strNum.Format(_T("%08o"), num);	    //strNum="00002000"

5、特别的

5.1、补零

只要在[width]前加0即可

str.Format(_T("this is %6d"), 12);      //str="this is     12"  
str.Format(_T("this is %06d"), 12);     //str="this is 000012"  

5.2、对齐规则

当指定宽度大于要输出位数时,数右对齐,左端补空格,当前缀’-‘号时,想要数左对齐,右端补空格
前提:只有当“指定宽度”存在时,前缀’-'才有意义。
经验:一般来说,左端对齐的形式看上去要美观整齐一点。

5.3、输出正负号的技巧:

str.Format(_T("this is %+6d"), 12);      //str="this is    +12" 
str.Format(_T("this is %+06d"), 12);     //str="this is +00012"   

只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号)
如果不希望正数的前面出现‘+’号,只要在中间加个“ ”号(即:空格)就行。
这样如果一个数是非负数,就在它的前面插入一个空格。
如果‘+’和‘ ’同时出现在“中间”时,要以‘+’为准。 两个符号的共同点:用于对齐输出的数:(尤其对于小数来说)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏Gordon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值