




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、VC+中Format函數詳解函數說明Format是CString類的一個成員函數,它通過格式操作使任意類型的數據轉換成一個字符串。 函數聲明function Format(const Format: string; const Args: array of const): string; overload; 函數功能事實上Format方法有兩種形式,另外一種是三個參數的,主要區別在于它是線程安全的, 但并不多用,所以這里只對第一個介紹。Format參數是一個格式字符串,用于格式化Args里面的值的。Args是一個變量數組,即它里面可以有多個參數,而且每個參數可以不同。 例如: Format(m
2、y name is %6s,wind); 返回的是:my name is wind 函數參數Format里面可以寫普通的字符串,比如my name is ,但有些格式指令字符具有特殊意義,比如%6s 格式指令具有以下的形式: % index : - width . prec type 它是以%開始,而以type結束,type表示一個具體的類型。中間是用來格式化type類型的指令字符,是可選的。各個參數的含義與用途如下; type type參數可選的類型有d,u,f,e,g,n,m,p,s,x. 1) d 十進制數,表示一個整型值,u 和d一樣是整型值,但它是無符號的,而如果它對應的值是負的,則
3、返回時是一個2的32次方減去這個負數的絕對值。 例如:Format(this is %u,-2); 返回的是:this is 4294967294 2)f 對應浮點數 3)e科學表示法,對應整型數和浮點數 例如:Format(this is %e,-2.22); 返回的是:this is -2.220000E+000 4)g 這個只能對應浮點型,且它會將值中多余的數去掉 例如:Format(this is %g,02.200); 返回的是:this is 2.2 5)n 只能對應浮點型,將值轉化為號碼的形式,看一個例子就明白了 例如:Format(this is %n,4552.2176);
4、返回的是:this is 4,552.22 注意:一是,只表示到小數后兩位 二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的 6)m 錢幣類型,但關于貨幣類型有更好的格式化方法,這里只是簡單的格式化,另外它只對應于浮點值 例如:Format(this is %m,9552.21); 返回的是:this is ¥9,552.21 7)p 對應于指針類型,返回的值是指針的地址,以十六進制的形式來表示 例如: Format(this is %p,p); 返回的是:this is 0012F548 8)s 對應字符串類型 9)x 必須是一個整形值,以十六進制的形式返回 例如:Forma
5、t(this is %X,15); 返回的是:this is F 下面介紹格式化Type的指令: index : :index指示Args中參數顯示的順序 。 例如: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 若定義為:Format(%d %d %d %0:d %d, 1, 2, 3, 4) ; 那么將返回的是:1 2 3 1 2 若想返回的是1 2 3
6、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 - :這個指定參數向
7、左對齊,和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
8、 is 0001234 對于字符型,剛好和整型值相反,如果prec比字符串型的長度大,則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符。 例如:Format(this is %.2s,1234); 返回的是:this is 12 之前說過的例子:Format(this is %e,-2.22); 返回的是:this is -2.220000E+000 若這樣:Format(this is %.2e,-2.22); 就可以解決了! 編輯本段二 FormatDateTime的用法他的聲明為: function FormatDateTime(const Format: string; Date
9、Time: TDateTime): string; overload; 當然和Format一樣還有一種,但這里只介紹常用的第一種 Format參數是一個格式化字符串。DateTime是時間類型。返回值是一種格式化后的 字符串 重點來看Format參數中的指令字符 c 以短時間格式顯示時間,即全部是數字的表示 FormatdateTime(c,now); 輸出為:2004-8-7 9:55:40 d 對應于時間中的日期,日期是一位則顯示一位,兩位則顯示兩位 FormatdateTime(d,now); 輸出可能為131 dd 和d的意義一樣,但它始終是以兩位來顯示的 FormatdateTime
10、(dd,now); 輸出可能為0131 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 表
11、示月 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);
12、輸出為 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 y
13、y-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類型 為什么是這個類型,
14、因為它是所有浮點值中表示范圍最大的,如果傳入該方法的參數 比如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中指定逗號,這個整數位數必須
15、大于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.0
16、E+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方法給我們進行字符串的轉換帶來了很大的方便,
17、比如常見的int、float和double這些數字類型轉換為CString字符串只需一行代碼就可以實現。先看看Format用于轉換的格式字符:%c 單個字符%d 十進制整數(int)%ld 十進制整數(long)%f 十進制浮點數(float)%lf 十進制浮點數(double)%o 八進制數%s 字符串%u 無符號十進制數%x 十六進制數1、int轉換為CString:CString str;int number=15;/str=15str.Format(_T(%d),number);/str= 15(前面有兩個空格;4表示將占用4位,如果數字超過4位將輸出所有數字,不會截斷)str.For
18、mat(_T(%4d),number);/str=0015(.4表示將占用4位,如果數字超過4位將輸出所有數字,不會截斷)str.Format(_T(%.4d),number);long轉換為CString的方法與上面相似,只需要把%d改為%ld就可以了。2、double轉換為CString:CString str;double num=1.46;/str=1.46str.Format(_T(%lf),num);/str=1.5(.1表示小數點后留1位,小數點后超過1位則四舍五入)str.Format(_T(%.1lf),num);/str=1.4600str.Format(_T(%.4f),
19、num);/str= 1.4600(前面有1個空格)str.Format(_T(%7.4f),num);float轉換為CString的方法也同上面相似,將lf%改為f%就可以了。3、將十進制數轉換為八進制:CString str;int num=255;/str=377str.Format(_T(%o),num);/str=00000377str.Format(_T(%.8o),num);Format是一個很常用,卻又似乎很煩的方法,以下是它的完整概貌,以供大家查詢之用:格式化字符串forma(%d,12)意思是將一個整形的格式化的字符(我認為是保持其形狀不變)1).格式說明總是以%字符開始
20、,以下是不同類型數據的格式方式%號后的說明:d輸出帶符號十進制數o輸出無符號八進制數x輸出無符號十六進制數u輸出無符號數c輸出單個字符s輸出一串字符f輸出實數(6位小數)e以指數形式輸出實數g選用f與e格式中輸出寬度較小的格式,不輸出0ld輸入輸出long型數據lf輸入輸出double型數據m數據輸出寬度為m.n輸出小數位數為n一、字符串首先看它的聲明:functionFormat(constFormat:string;constArgs:arrayofconst):string;overload;事實上Format方法有兩個種形式,另外一種是三個參數的,主要區別在于它是線程安全的,但并不多用
21、,所以這里只對第一個介紹:functionFormat(constFormat:string;constArgs:arrayofconst):string;overload;Format參數是一個格式字符串,用于格式化Args里面的值的。Args又是什么呢,它是一個變體數組,即它里面可以有多個參數,而且每個參數可以不同。如以下例子:Format(mynameis%6s,wind);返回后就是mynameiswind現在來看Format參數的詳細情況:Format里面可以寫普通的字符串,比如mynameis但有些格式指令字符具有特殊意義,比如%6s格式指令具有以下的形式:%index:-widt
22、h.prectype它是以%開始,而以type結束,type表示一個具體的類型。中間是用來格式化type類型的指令字符,是可選的。先來看看type,type可以是以下字符:d十制數,表示一個整型值u和d一樣是整型值,但它是無符號的,而如果它對應的值是負的,則返回時是一個2的32次方減去這個絕對值的數如:Format(thisis%u,-2);返回的是:thisis4294967294f對應浮點數e科學表示法,對應整型數和浮點數,比如Format(thisis%e,-2.22);返回的是:thisis-2.220000E+000等一下再說明如果將數的精度縮小g這個只能對應浮點型,且它會將值中多余
23、的數去掉比如Format(thisis%g,02.200);返回的是:thisis2.2n只能對應浮點型,將值轉化為號碼的形式。看一個例子就明白了Format(thisis%n,4552.2176);返回的是thisis4,552.22注意有兩點,一是只表示到小數后兩位,等一下說怎么消除這種情況二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的m錢幣類型,但關于貨幣類型有更好的格式化方法,這里只是簡單的格式化另外它只對應于浮點值Format(thisis%m,9552.21);返回:thisis¥9,552.21p對應于指針類型,返回的值是指針的地址,以十六進制的形式來表示例如:
24、Format(thisis%p,p);Edit1的內容是:thisis0012F548s對應字符串類型,不用多說了吧x必須是一個整形值,以十六進制的形式返回Format(thisis%X,15);返回是:thisisF類型講述完畢,下面介紹格式化Type的指令:index:這個要怎么表達呢,看一個例子Format(thisis%d%d,12,13);其中第一個%d的索引是0,第二個%d是1,所以字符顯示的時候是這樣thisis1213而如果你這樣定義:Format(thisis%1:d%0:d,12,13);那么返回的字符串就變成了thisis1312現在明白了嗎,index:中的index指
25、示Args中參數顯示的順序還有一種情況,如果這樣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); /error由于Args中只有1213兩個數,所以Index只能是0或1,這里為2就錯了width指定將被格式化的值占的寬度,看一個例子就明白了Format(thisis%4d,12);輸出是:thisis12這個是比較容易,不過如果Width的值小
26、于參數的長度,則沒有效果。如:Format(thisis%1d,12);輸出是:thisis12-這個指定參數向左齊,和width合在一起最可以看到效果:Format(thisis%-4d,yes,12);輸出是:thisis12,yes.prec指定精度,對于浮點數效果最佳:Format(thisis%.2f,1.1234);輸出thisis1.12Format(thisis%.7f,1.1234);輸了thisis1.1234000而對于整型數,如果prec比如整型的位數小,則沒有效果反之比整形值的位數大,則會在整型值的前面以0補之Format(thisis%.7d,1234);輸出是:t
27、hisis0001234對于字符型,剛好和整型值相反,如果prec比字符串型的長度大則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符Format(thisis%.2s,1234);輸出是thisis12而上面說的這個例子:Format(thisis%e,-2.22);返回的是:thisis-2.22000000000000E+000怎么去掉多余的0呢,這個就行啦Format(thisis%.2e,-2.22);好了,第一個總算講完了,應該對他的應用很熟悉了吧m_result.Format(您選的城市是:/r/n%s,/r/n您選的人是:/r/n%s,city1+city2+city3,p
28、eople);UpdateData(0);格式小結:(1)最常用的格式是%d,含義是以10進制形式打印一個整數。如果輸出的整數是負數,則,輸出的第一個字符就是-號(2)%u格式與%d格式類似,只不過要求打印無符號10進制整數。(3)%o格式請求輸出8進制整數(4)%x和%X格式請求輸出16進制整數。%x格式中用小寫字母a,b,c,d,e,f來表示10到15之間的數%X格式中用大寫字母A,B,C,D,E,F來表示10到15之間的數共同點:8進制和16進制整數總是作為無符號數處理的。(5)%s格式用于打印字符串,與之對應的參數應該是一個字符指針,待輸出的字符始于該指針所指向的地址,直到出現一個空字
29、符(/0)才終止。(6)%c格式用于打印單個字符:例如:printf(%c,c);等價于putchar;(7)%g,%f和%e這三個格式用于打印浮點值。%g格式用于打印那些不需要按列對齊的浮點數特別有用。其作用有二:一,去掉該數尾多余的零(沒有達到六位的數)二,保留六位有效數字(多余六位的)%e格式用于打印浮點數時,一律顯示地使用指數形式:例如:輸出圓周率時是:3.141593e+00兩者的區別:%g格式打印出的數是總共6位有效數字%e格式打印出小數點后的6位有效數字%f禁止使用指數形式來表示浮點數。因此圓周率輸出為:3.141593(但注意它的精度要求:也是小數點后6位有效數字)(8)%格式
30、用于打印一個%字符。(9)%E和%G只是在輸出時用大寫字母(E)代替了小寫字母(e)另外需要注意的一些知識點:對齊規則:(1)當指定寬度大于要輸出位數時,數右對齊,左端補空格當前綴-號時,想要數左對齊,右端補空格大大的前提:只有當“指定寬度”存在時,前綴-才有意義。經驗:一般來說,左端對齊的形式看上去要美觀整齊一點。輸出正負號的技巧:(記住)例如:printf(%+d%+d%+d/n,-5,0,5);只要在中間加個“+”號就行。作用是輸出符號位(即,數的正負號)如果不希望正數的前面出現+號,可用下面的方法只要在中間加個“”號(即:空格)就行。(記住)例如:作用:如果一個數是非負數,就在它的前面
31、插入一個空格。inti;for(i=-3;i=3;i+)printf(%d/n,i);/注意%和d之間有一個空格輸出結果如下:-3-2-10123問題:如果+和同時出現在“中間”時,要以+為準。兩個符號的共同點:用于對齊輸出的數:(尤其對于小數來說)兩種格式:%+e和%eC語言中基本的輸入輸出函數有:putchar():把變量中的一個字符常量輸出到顯示器屏幕上;getchar();從鍵盤上輸入一個字符常量,此常量就是該函數的值;printf();把鍵盤中的各類數據,加以格式控制輸出到顯示器屏幕上;scanf();從鍵盤上輸入各類數據,并存放到程序變量中;puts():把數組變量中的一個字符串常
32、量輸出到顯示器屏幕上;gets():從鍵盤上輸入一個字符串常量并放到程序的數組中.sscanf();從一個字符串中提取各類數據。putchar()和getchar()顧名思議就是從輸入流中獲取一個字符和輸出一個字符,比較簡單,不再多講。例子如下:charc=getchar();putchar;格式化輸入輸出scanf()和printf()是最有用的,所以重點講一下。printf():一般形式:printf(格式控制.輸出列表);eg:printf(a=%d,b=%f,c=%c/n,a,b,c);1;格式控制.格式控制是用雙引號括起來的字符串,也稱轉換控制字符串,它包含以下兩部分信息.格式說明:
33、由%和格式字符組成,如%d,%f,%c,他的作用是把輸出數據轉換為指定格式輸出,格式的說明總是由%字符開始的.普通字符:需要原樣輸出的字符,或者是一些有特殊含義的字符,如/n,/t。2;輸出列表就是需要輸出的一些數據,也可以是表達式,如果在函數中需要輸出多個變量或表達式,則要用逗號隔開.一些特殊字符的輸出:單引號,雙引號,和反斜杠的輸出在前面加轉義字符”/”如:”/”,“/”,“/”%的輸出用兩個連在一起的%,即printf(“%”);常用的格式說明如下:格式字符d以十進制形式輸出帶符號整數(正數不輸出符號)o以八進制形式輸出無符號整數(不輸出前綴O)x以十六進制形式輸出無符號整數(不輸出前綴
34、OX)u以十進制形式輸出無符號整數f以小數形式輸出單精度實數lf以小數形式輸出雙精度實數e以指數形式輸出單、雙精度實數g以%f%e中較短的輸出寬度輸出單、雙精度實數c輸出單個字符s輸出字符串這里強調一下:網上很多文章都說f和lf是一樣的,即不管單精度,雙精度浮點數,都可以用f,但我在POJ上做過測試,輸出Double時用f確實也可以,但讀入時,用f就報WA,所以大家如果對Double進行讀寫的話,都用lf吧。說到Double,再啰嗦一句,建議大家要用到浮點數時都用Double,不要用float,因為在很多情況下,float精度不夠會導致WA。特殊:對64位整數的輸入輸出,在POJ上的C+環境下
35、(即VC),64位整數是:_int64(注意int前面是兩個下劃線)輸入輸出格式為”%I64d”.在G+環境下(即DevC+)64位整數是longlong輸入輸出格式為”%lld”.輸出寬度用十進制整數來表示輸出的最少位數。注意若實際位數多于定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0。精度精度格式符以“.”開頭,后跟十進制整數。意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。標志格式字符-結果左對齊,右邊填空格+輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號例如:doublec=24212345.24232;printf(“%020.4”);表示輸出精確到小數點后4位,輸出占20位,若有空余的位補0.scanf:scanf的很多用法都是和printf對應的,故不再贅述。說一下scanf一個特別好用的地方,就是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京中醫藥大學翰林學院《定性數據分析》2023-2024學年第二學期期末試卷
- 山東工藝美術學院《操作系統原理實驗課》2023-2024學年第二學期期末試卷
- 九江學院《民舞-運動舞蹈劇目排練與實踐》2023-2024學年第二學期期末試卷
- 山東省淄博市臨淄區2024-2025學年三年級數學第二學期期末聯考模擬試題含解析
- 綿陽城市學院《醫學影像成像原理》2023-2024學年第二學期期末試卷
- 四川護理職業學院《高分子物理B》2023-2024學年第二學期期末試卷
- 鐵路冬季四防安全培訓
- 2025水質檢測技術服務合同
- 2025年高考歷史歷史問答題5種公式法5種記憶法匯編
- 2025建筑工程施工合同范本2
- 2025年四川內江市資中縣潤資水務投資開發有限責任公司招聘筆試參考題庫附帶答案詳解
- 2025年福建泉州交發集團招聘筆試參考題庫含答案解析
- 2024年度文化教育機構代運營合作協議3篇
- 兩位數加一位數口算練習題4000道88
- 《張愛玲傾城之戀》課件
- 市場監管總局行業價格監管方案
- 光伏低壓并網試驗施工方案
- 中老年常見病及預防路徑
- 無錫網格員考試題庫
- 長安汽車在線測評題目
- 前程無憂國企招聘筆試題庫
評論
0/150
提交評論