格式化表達(dá)式:%[零個(gè)或多個(gè)標(biāo)志][最小字段寬度][精度][修改符]格式碼
注意:[]方括號(hào)表示可選參數(shù)
1,、格式碼
代碼 c
參數(shù) 數(shù)字值(number)
含義 參數(shù)被裁剪為8位字節(jié)碼并作為字符進(jìn)行打印。
代碼 i,d
參數(shù) 數(shù)字值(number)
含義 參數(shù)作為一個(gè)十進(jìn)制整數(shù)打印,。如果給出了精度而且值的位數(shù)小于精度位數(shù),,前面就用0填充。
代碼 u,o,x,X
參數(shù) 數(shù)字值(number)
含義 參數(shù)作為一個(gè)無(wú)符號(hào)數(shù)字值打印,,u使用十進(jìn)制,,o使用八進(jìn)制,,x或X使用十六進(jìn)制,兩者的區(qū)別是x約定使用abcdef,,而X約定使用ABCDEF,。
代碼 e,E
參數(shù) 數(shù)字值(number)
含義 參數(shù)根據(jù)指數(shù)形式打印。例如,,6.023000e23是使用代碼e,,6.023000E23是使用代碼E。小數(shù)點(diǎn)后面的位數(shù)由精度字段決定,,缺省值是6,。
代碼 f
參數(shù) 數(shù)字值(number)
含義 參數(shù)按照的常規(guī)浮點(diǎn)格式打印。精度字段決定小數(shù)點(diǎn)后面的位數(shù),,缺省值是6,。
代碼 g,G
參數(shù) 數(shù)字值(number)
含義 參數(shù)以%f或%e(如G則%E)的格式打印,取決于它的值,。如果指數(shù)大于等于-4但小于精度字段就使用%f格式,,否則使用指數(shù)格式。
代碼 s
參數(shù) 字符串值(string)
含義 打印一個(gè)字符串,。
代碼 q
參數(shù) (無(wú))
含義 打印一個(gè)字符串,,并將字符串置于一對(duì)引號(hào)中,如果字符串中包含引號(hào)換行等自動(dòng)添加轉(zhuǎn)義符,。如果要讀取一個(gè)字符串傳為腳本代碼,。為避免用戶惡意注入引號(hào)等特殊字符,可以使用%q進(jìn)行格式化,。
代碼 %
參數(shù) (無(wú))
含義 取消%轉(zhuǎn)義打印一個(gè)%字符,即用%%表示本來(lái)的%,。
2、 標(biāo)志
標(biāo)志 -
含義 值在字段中做對(duì)齊,,缺省情況下是右對(duì)齊,。
標(biāo)志 0
含義 當(dāng)數(shù)值為右對(duì)齊時(shí),缺省情況下是使用空格填充值左邊未使用的列,。這個(gè)標(biāo)志表示用零填充,,它可用于d,i,u,o,x,X,e,E,f,g和G代碼。
使用d,i,u,o,x和X代碼時(shí),,如果給出了精度字段,,零標(biāo)志就被忽略。如果格式代碼中出現(xiàn)了負(fù)號(hào),,零標(biāo)志也沒(méi)有效果,。
標(biāo)志 +
含義 當(dāng)用于一個(gè)格式化某個(gè)有符號(hào)值代碼時(shí),如果值非負(fù),,正號(hào)標(biāo)志就會(huì)給它加上一個(gè)正號(hào),。如果該值為負(fù),,就像往常一樣顯示一個(gè)負(fù)號(hào)。在
缺省情況下,,正號(hào)并不會(huì)顯示。
標(biāo)志 空格
含義 只用于轉(zhuǎn)換有符號(hào)值的代碼,。當(dāng)值非負(fù)時(shí),,這個(gè)標(biāo)志把一個(gè)空格添加到它開始的位置。注意這個(gè)標(biāo)志和正號(hào)標(biāo)志是相互排斥的,,如果兩個(gè)
同時(shí)給出,,空格標(biāo)志便被忽略。
標(biāo)志 #
含義 選擇某些代碼的另一種轉(zhuǎn)換形式:
用于... #標(biāo)志...
o 保證產(chǎn)生的值以一個(gè)零開頭
x,X 在非零值前面加0x前綴(%X則為0X)
e,E,f 確保結(jié)果始終包含一個(gè)小數(shù)點(diǎn),,即使它后面沒(méi)有數(shù)字
g,G 和上面的e,E和f代碼相同,。另外,綴尾的0并不從小數(shù)中去除
3,、 字段寬度
字段寬度是一個(gè)十進(jìn)制整數(shù),,用于指定將出現(xiàn)在結(jié)果中的最小字符數(shù)。如果值的字符數(shù)少于字段寬度,,就對(duì)它進(jìn)行填充以增加長(zhǎng)度,。
4、 精度
精度以一個(gè)句點(diǎn)開頭,,后面跟一個(gè)可選的十進(jìn)制數(shù),。如果未給出整數(shù),精度的缺省值為零,。
對(duì)于d,i,u,o,x和X類型的轉(zhuǎn)換,,精度字段指定將出現(xiàn)在結(jié)果中的最小的數(shù)字個(gè)數(shù)并覆蓋零標(biāo)志。如果轉(zhuǎn)換后的值的位數(shù)小于寬度,,就在它的前面插入零,。如果值為零且精度也為零,則轉(zhuǎn)換結(jié)果就不會(huì)產(chǎn)生數(shù)字,。
對(duì)于e,E和f類型的轉(zhuǎn)換,,精度決定將出現(xiàn)在小數(shù)點(diǎn)之后的數(shù)字位數(shù)。
對(duì)于g和G類型的轉(zhuǎn)換,,它指定將出現(xiàn)在結(jié)果中的最大有效位數(shù),。
當(dāng)使用s類型的轉(zhuǎn)換時(shí),精度指定將被轉(zhuǎn)換的最多的字符數(shù),。
如果用于表示字段寬度和/或精度的十進(jìn)制整數(shù)由一個(gè)星號(hào)代替,,那么printf的下一個(gè)參數(shù)(必須是個(gè)整數(shù))就提供寬度和(或)精度。因此,,
這些值可以通過(guò)計(jì)算獲得而不必預(yù)先指定,。
5,、示例
格式代碼 A ABC ABCDEFGH
%s A ABC ABCDEFGH
%5s ####A ##ABC ABCDEFGH
%.5s A ABC ABCDE
%5.5s ####A ##ABC ABCDE
%-5s A#### ABC## ABCDEFGH
格式代碼 1 -12 12345 123456789
%d 1 -12 12345 123456789
%6d #####1 ###-12 #12345 123456789
%.4d 0001 -0012 12345 123456789
%6.4d ##0001 #-0012 #12345 123456789
%-4d 1#### -12# 12345 123456789
%04d 0001 -012 12345 123456789
%+d +1 -12 +12345 +123456789
格式代碼 1 .01 .00012345 12345.6789
%f 1.000000 0.010000 0.000123 12345.678900
%10.2d ######1.00 #####0.01 ######0.00 ##12345.67
%e 1.000000e+00 1.000000e-02 1.234500e-04 1.234568e+04
%.4e 1.0000e+00 1.0000e-02 1.2345e-04 1.2346e+04
%g 1 0.01 0.00012345 12345.7
格式代碼 6.023e23
%f 60229999999999975882752.000000
%10.2e 60229999999999975882752.00
%e 6.023000e+23
%.4e 6.0230e+23
%g 6.023e+23
用上面的格式化函數(shù)可以輕松實(shí)現(xiàn)數(shù)字的進(jìn)制轉(zhuǎn)換
--數(shù)字轉(zhuǎn)換為二進(jìn)制字符串
str = string.format("%b",23 );
--二進(jìn)制字符串轉(zhuǎn)換為數(shù)字
n = tonumber(str,2)
--數(shù)字轉(zhuǎn)換為八進(jìn)制字符串
str = string.format("%o",23 );
--八進(jìn)制字符串轉(zhuǎn)換為數(shù)字
n = tonumber(str,8)
--數(shù)字轉(zhuǎn)換為十六進(jìn)制字符串
str = string.format("%x",23 );
--十六進(jìn)制字符串轉(zhuǎn)換為數(shù)字
n = tonumber(str,16)
四、格式化時(shí)間
模擬精靈v7.10 格式化時(shí)間的函數(shù)有 string.time;string.ftime;os.data;os.time 等函數(shù),。
os.time 是從table生成數(shù)字時(shí)間值 string.time是從字符串生成數(shù)字時(shí)間值,。
os.data 與string.ftime功能相同從時(shí)間值反過(guò)來(lái)生成字符串或時(shí)間。
這里我們介紹string.time函數(shù),、string.ftime函數(shù),下面是使用示例:
--從字符串創(chuàng)建時(shí)間值
t = string.time("2006/6/6 0:0:0","%Y/%m/%d %H:%M:%S")
--從時(shí)間值創(chuàng)建字符串
str = string.ftime("%Y/%m/%d %H:%M:%S",t )
格式化語(yǔ)法(在很多編程語(yǔ)言中都適用的語(yǔ)法)
%a - 當(dāng)前區(qū)域星期幾的簡(jiǎn)寫
%A - 當(dāng)前區(qū)域星期幾的全稱
%b - 當(dāng)前區(qū)域月份的簡(jiǎn)寫
%B - 當(dāng)前區(qū)域月份的全稱
%c - 當(dāng)前區(qū)域首選的日期時(shí)間表達(dá)
%C - 世紀(jì)值(年份除以 100 后取整,,范圍從 00 到 99)
%d - 月份中的第幾天,十進(jìn)制數(shù)字(范圍從 01 到 31)
%D - 和 %m/%d/%y 一樣
%e - 月份中的第幾天,,十進(jìn)制數(shù)字,,一位的數(shù)字前會(huì)加上一個(gè)空格(范圍從 ' 1' 到 '31')
%g - 和 %G 一樣,但是沒(méi)有世紀(jì)
%G - 4 位數(shù)的年份,,符合 ISO 星期數(shù)(參見(jiàn) %V),。和 %V 的格式和值一樣,只除了如果 ISO 星期數(shù)屬于前一年或者后一年,,則使用那一年,。
%h - 和 %b 一樣
%H - 24 小時(shí)制的十進(jìn)制小時(shí)數(shù)(范圍從 00 到 23)
%I - 12 小時(shí)制的十進(jìn)制小時(shí)數(shù)(范圍從 00 到 12)
%j - 年份中的第幾天,十進(jìn)制數(shù)(范圍從 001 到 366)
%m - 十進(jìn)制月份(范圍從 01 到 12)
%M - 十進(jìn)制分鐘數(shù)
%n - 換行符
%p - 根據(jù)給定的時(shí)間值為 `am' 或 `pm',,或者當(dāng)前區(qū)域設(shè)置中的相應(yīng)字符串
%r - 用 a.m. 和 p.m. 符號(hào)的時(shí)間
%R - 24 小時(shí)符號(hào)的時(shí)間
%S - 十進(jìn)制秒數(shù)
%t - 制表符
%T - 當(dāng)前時(shí)間,,和 %H:%M:%S 一樣
%u - 星期幾的十進(jìn)制數(shù)表達(dá) [1,7],1 表示星期一
%U - 本年的第幾周,,從第一周的第一個(gè)星期天作為第一天開始
%V - 本年第幾周的 ISO 8601:1988 格式,,范圍從 01 到 53,第 1 周是本年第一個(gè)至少還有 4 天的星期,,星期一作為每周的第一天,。(用 %G 或者 %g 作為指定時(shí)間戳相應(yīng)周數(shù)的年份組成。)
%W - 本年的第幾周數(shù),,從第一周的第一個(gè)星期一作為第一天開始
%w - 星期中的第幾天,,星期天為 0
%x - 當(dāng)前區(qū)域首選的時(shí)間表示法,不包括時(shí)間
%X - 當(dāng)前區(qū)域首選的時(shí)間表示法,,不包括日期
%y - 沒(méi)有世紀(jì)數(shù)的十進(jìn)制年份(范圍從 00 到 99)
%Y - 包括世紀(jì)數(shù)的十進(jìn)制年份
%Z - 時(shí)區(qū)名或縮寫
%% - 文字上的 `%' 字符