MFC中Format函数最全用法.docx

上传人:b****6 文档编号:8933605 上传时间:2023-02-02 格式:DOCX 页数:16 大小:26.59KB
下载 相关 举报
MFC中Format函数最全用法.docx_第1页
第1页 / 共16页
MFC中Format函数最全用法.docx_第2页
第2页 / 共16页
MFC中Format函数最全用法.docx_第3页
第3页 / 共16页
MFC中Format函数最全用法.docx_第4页
第4页 / 共16页
MFC中Format函数最全用法.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

MFC中Format函数最全用法.docx

《MFC中Format函数最全用法.docx》由会员分享,可在线阅读,更多相关《MFC中Format函数最全用法.docx(16页珍藏版)》请在冰豆网上搜索。

MFC中Format函数最全用法.docx

MFC中Format函数最全用法

VC++中Format函数详解

函数说明

  Format是CString类的一个成员函数,它通过格式操作使任意类型的数据转换成一个字符串。

函数声明

  functionFormat(constFormat:

string;constArgs:

arrayofconst):

string;overload;

函数功能

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

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

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

例如:

  Format("mynameis%6s","wind");

  返回的是:

mynameiswind

函数参数

  Format里面可以写普通的字符串,比如"mynameis",但有些格式指令字符具有特殊意义,比如"%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("thisis%u",-2);

  返回的是:

thisis4294967294

  2)f对应浮点数

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

  例如:

Format("thisis%e",-2.22);

  返回的是:

thisis-2.220000E+000

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

  例如:

Format("thisis%g",02.200);

  返回的是:

thisis2.2

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

  例如:

Format("thisis%n",4552.2176);

  返回的是:

thisis4,552.22

  注意:

一是,只表示到小数后两位

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

  6)m钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化,另外它只对应于浮点值

  例如:

Format("thisis%m",9552.21);

  返回的是:

thisis¥9,552.21

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

  例如:

Format("thisis%p",p);

  返回的是:

thisis0012F548

  8)s对应字符串类型

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

  例如:

Format("thisis%X",15);

  返回的是:

thisisF

  下面介绍格式化Type的指令:

  [index":

"]:

index指示Args中参数显示的顺序。

  例如:

Format("thisis%d%d",12,13);

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

thisis1213

  若定义为:

Format("thisis%1:

d%0:

d",12,13);

  那么返回的字符串就变成了:

thisis1312

  若定义为:

Format("%d%d%d%0:

d%d",1,2,3,4);

  那么将返回的是:

12312

  若想返回的是12314,必须这样定义:

Format("%d%d%d%0:

d%3:

d",1,2,3,4);

  注意:

索引不能超出Args中的个数,不然会引起异常。

  例如:

Format("thisis%2:

d%0:

d",12,13);

  由于Args中只有1213两个数,所以Index只能是0或1,这里为2就错了。

  [width]:

指定将被格式化的值占的宽度。

  例如:

Format("thisis%4d",12);

  返回的是:

thisis12

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

  例如:

Format("thisis%1d",12);

  返回的是:

thisis12

  ["-"]:

这个指定参数向左对齐,和[width]合在一起最可以看到效果。

  例如:

Format("thisis%-4d,yes",12);

  返回的是:

thisis12,yes

  ["."prec]:

指定精度,对于浮点数效果最佳。

  例如:

Format('thisis%.2f,1.1234);

  返回的是:

thisis1.12

  又如:

Format('thisis%.7f,1.1234);

  返回的是:

thisis1.1234000

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

  例如:

Format('thisis%.7d,1234);

  返回的是:

thisis0001234

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

  例如:

Format('thisis%.2s,1234);

  返回的是:

thisis12

  之前说过的例子:

Format("thisis%e",-2.22);

  返回的是:

thisis-2.220000E+000

  若这样:

Format('thisis%.2e',[-2.22]);就可以解决了!

编辑本段二FormatDateTime的用法

  他的声明为:

  functionFormatDateTime(constFormat:

string;DateTime:

TDateTime):

string;

  overload;

  当然和Format一样还有一种,但这里只介绍常用的第一种

  Format参数是一个格式化字符串。

DateTime是时间类型。

返回值是一种格式化后的

  字符串

  重点来看Format参数中的指令字符

  c以短时间格式显示时间,即全部是数字的表示

  FormatdateTime('c',now);

  输出为:

2004-8-79:

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('"todayis"c',now);

  输出为:

todayis2004-8-710:

26:

58

  时间中也可以加"-"或""来分开日期:

  FormatdateTime('"todayis"yy-mm-dd',now);

  FormatdateTime('"todayis"yymmdd',now);

  输出为:

todayis04-08-07

  也可以用":

"来分开时间

  FormatdateTime('"todayis"hh:

nn:

ss',now);

  输出为:

todayis10:

32:

23

编辑本段三.FormatFloat的用法

  常用的声明:

  functionFormatFloat(constFormat:

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函数的语法具有下面几个部分

在MFC程序中,使用CString来处理字符串是一个很不错的选择。

CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串。

CString的Format方法给我们进行字符串的转换带来了很大的方便,比如常见的int、float和double这些数字类型转换为CString字符串只需一行代码就可以实现。

  先看看Format用于转换的格式字符:

  %c                单个字符

  %d                十进制整数(int)

  %ld               十进制整数(long)

  %f                十进制浮点数(float)

  %lf               十进制浮点数(double)

  %o                八进制数

  %s                字符串

  %u                无符号十进制数

  %x                十六进制数

  1、int转换为CString:

  CStringstr;

  intnumber=15;

  //str="15"

  str.Format(_T("%d"),number);

  //str="15"(前面有两个空格;4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

  str.Format(_T("%4d"),number);

  //str="0015"(.4表示将占用4位,如果数字超过4位将输出所有数字,不会截断)

  str.Format(_T("%.4d"),number);

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

  2、double转换为CString:

  CStringstr;

  doublenum=1.46;

  //str="1.46"

  str.Format(_T("%lf"),num);

  //str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)

  str.Format(_T("%.1lf"),num);

  //str="1.4600"

  str.Format(_T("%.4f"),num);

  //str="1.4600"(前面有1个空格)

  str.Format(_T("%7.4f"),num);

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

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

  CStringstr;

  intnum=255;

  //str="377"

  str.Format(_T("%o"),num);

  //str="00000377"

  str.Format(_T("%.8o"),num);

 

 

 

 

 

 

Format是一个很常用,却又似乎很烦的方法,以下是它的完整概貌,以供大家查询之用:

  

格式化字符串forma("%d",12)意思是将一个整形的格式化的字符(我认为是保持其形状不变) 

1).格式说明总是以%字符开始,以下是不同类型数据的格式方式%号后的说明:

 

d输出带符号十进制数 

o输出无符号八进制数 

x输出无符号十六进制数 

u输出无符号数 

c输出单个字符 

s输出一串字符 

f输出实数(6位小数) 

e以指数形式输出实数 

g选用f与e格式中输出宽度较小的格式,不输出0 

ld输入输出long型数据 

lf输入输出double型数据 

m数据输出宽度为m 

.n输出小数位数为n 

一、字符串 

首先看它的声明:

  

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); //error

由于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]);  

好了,第一个总算讲完了,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1