【MFC】MFC中CString.Format的详细⽤法
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:
格式化命令format参数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"
只要在中间加个“+”号就⾏。作⽤是输出符号位(即,数的正负号)
如果不希望正数的前⾯出现‘+’号,只要在中间加个“ ”号(即:空格)就⾏。
这样如果⼀个数是⾮负数,就在它的前⾯插⼊⼀个空格。
如果‘+’和‘ ’同时出现在“中间”时,要以‘+’为准。 两个符号的共同点:⽤于对齐输出的数:(尤其对于⼩数来说)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。