lua脚本精灵stringformat函数的用法.docx
《lua脚本精灵stringformat函数的用法.docx》由会员分享,可在线阅读,更多相关《lua脚本精灵stringformat函数的用法.docx(18页珍藏版)》请在冰豆网上搜索。
lua脚本精灵stringformat函数的用法
string.format()函数的用法
lua中有很多字符串操作的函数,string.format()就是其中的一个,顾名思义,format是格式化的意思,则string.format()功能就是格式化一个字符串。
我们知道lua中可以用".."连接字符串,可以起到一部分格式化字符串的作用,但是如果字符串较长或者有特殊的格式转换操作(如十六进制转换),用".."就会很繁琐且可读性差。
用string.format()就是一个很好的解决方案。
函数定义
string.format()第一个参数为字符串格式,后面的参数可以任意多个,用于填充第一个参数中的格式控制符,最后返回完整的格式化后的字符串。
格式控制符以%开头,常用的有以下几种
%s - 接受一个字符串并按照给定的参数格式化该字符串
%d -接受一个数字并将其转化为有符号的整数格式
%f - 接受一个数字并将其转化为浮点数格式(小数),默认保留6位小数,不足位用0填充
%x - 接受一个数字并将其转化为小写的十六进制格式
%X - 接受一个数字并将其转化为大写的十六进制格式
示例:
1.str=string.format("字符串:
%s\n整数:
%d\n小数:
%f\n十六进制数:
%X","qweqwe",1,0.13,348)
2.print(str)
输出结果:
1.字符串:
qweqwe
2.整数:
1
3.小数:
0.130000
4.十六进制数:
15C
5.
%X的特殊用法
%08X 中间的第2个数字格式化成多少位,第1个数字表示不足位数时的填充数,通常用0填充。
例如:
1.str=string.format("0x%08X",348)
2.print(str)
前面的0x只是个普通的字符串,可有可无,因为我们一般在十六进制数前面加上0x来表明这是一个十六进制数,所以这里才加了个0x,没有其他特殊意义。
输出结果:
1.0x0000015C
%x的特殊用法与%X一样
%f的特殊用法
%0.3f 中的小数点右边的数字表示小数点后面保留多少位,小数点前面的数字表示位数不足时的填充数,通用用0填充。
例如:
格式化一个小数,保留2位小数
1.str=string.format("%0.2f",34.2344)
2.print(str)
输出结果:
1.34.23
更多用法
前面是常用的格式控制符,string.format()还有很多其他的格式控制符,更详细的信息可以参考官方文档。
%c-接受一个数字,并将其转化为ASCII码表中对应的字符
%d,%i-接受一个数字并将其转化为有符号的整数格式
%o-接受一个数字并将其转化为八进制数格式
%u-接受一个数字并将其转化为无符号整数格式
%x-接受一个数字并将其转化为十六进制数格式,使用小写字母
%X-接受一个数字并将其转化为十六进制数格式,使用大写字母
%e-接受一个数字并将其转化为科学记数法格式,使用小写字母e
%E-接受一个数字并将其转化为科学记数法格式,使用大写字母E
%f-接受一个数字并将其转化为浮点数格式
%g(%G)-接受一个数字并将其转化为%e(%E,对应%G)及%f中较短的一种格式
%q-接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s-接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式,可以在%号后添加参数.参数将以如下的顺序读入:
(1)符号:
一个+号表示其后的数字转义符将让正数显示正号.默认情况下只有负数显示符号.
(2)占位符:
一个0,在后面指定了字串宽度时占位用.不填时的默认占位符是空格.
(3)对齐标识:
在指定了字串宽度时,默认为右对齐,增加-号可以改为左对齐.
(4)宽度数值
(5)小数位数/字串裁切:
在宽度数值后增加的小数部分n,若后接f(浮点数转义符,如%6.3f)则设定该浮点数的小数只保留n位,若后接s(字符串转义符,如%5.3s)则设定该字符串只显示前n位.
在这些参数的后面则是上述所列的转义码类型(c,d,i,f,...).
1.print(string.format("pi=%.4f",PI))
2. -->pi=3.1416
3.d=5;m=11;y=1990
4.print(string.format("%02d/%02d/%04d",d,m,y))
5. -->05/11/1990
6.tag,title="h1","atitle"
7.print(string.format("<%s>%s%s>",tag,title,tag))
8. -->
atitle
第一个例子,%.4f代表小数点后面有4位小数的浮点数。
第二个例子%02d代表以固定的两位显示十进制数,不足的前面补0。
而%2d前面没有指定0,不足两位时会以空白补足。
对于格式串部分指示符得详细描述清参考lua手册,或者参考C手册,因为Lua调用标准C的printf函数来实现最终的功能。
以下是一些例子:
1.string.format("%%c:
%c",83) 输出S
2.string.format("%+d",17.0) 输出+17
3.string.format("%05d",17) 输出00017
4.string.format("%o",17) 输出21
5.string.format("%u",3.14) 输出3
6.string.format("%x",13) 输出d
7.string.format("%X",13) 输出D
8.string.format("%e",1000) 输出1.000000e+03
9.string.format("%E",1000) 输出1.000000E+03
10.string.format("%6.3f",13) 输出13.000
11.string.format("%q","One\nTwo") 输出"One\
12. Two"
13.string.format("%s","monkey") 输出monkey
14.string.format("%10s","monkey") 输出 monkey
15.string.format("%5.3s","monkey") 输出 mon
%a
abbreviatedweekdayname(e.g.,Wed)
%A
fullweekdayname(e.g.,Wednesday)
%b
abbreviatedmonthname(e.g.,Sep)
%B
fullmonthname(e.g.,September)
%c
dateandtime(e.g.,09/16/9823:
48:
10)
%d
dayofthemonth(16)[01-31]
%H
hour,usinga24-hourclock(23)[00-23]
%I
hour,usinga12-hourclock(11)[01-12]
%M
minute(48)[00-59]
%m
month(09)[01-12]
%p
either"am"or"pm"(pm)
%S
second(10)[00-61]
%w
weekday(3)[0-6=Sunday-Saturday]
%x
date(e.g.,09/16/98)
%X
time(e.g.,23:
48:
10)
%Y
fullyear(1998)
%y
two-digityear(98)[00-99]
%%
thecharacter'%'
一、时间的三种格式
1、用数值表示时间值
用数字值来表示时间值,
实际上时间值的本质就是一个数字值。
例如:
d=1131286477
这里的1131286477是一个以秒为单位的格林威志时间(gmt),注意不同时区的时差
2、用字符串表示时间
用字符串来来表示时间。
例如:
d="2005-11-0622:
18:
30" --2005年11月6日22点18分30秒
d="11/06/200522:
18:
30" --即2005年11月6日22点18分30秒
3、时间的列表格式
用table对象来表示时间
例如:
d={year=2005,month=11,day=6,hour=22,min=18,sec=30,isdst=false}
--同样表示2005年11月6日22点18分30秒,其中isdst=false表示不使用夏令时
我们可以这样访问时间列表d.year=2005;
二、取得数值(number)格式的时间值
time=os.time()
返回一个标准的number(数值)格式的时间值,这也是最原始的时间值
os.time()返回的时间是以秒为单位的。
1、获取当前时间数值
time=os.time();
--如果没有指定任何参数,则返回当前时间
2、通过table参数指定时间,获取指定的时间数值
time=os.time(tab);
通过一个table参数,指定一个时间,返回时间的数值格式.
例如:
localtab={year=2005,month=11,day=6,hour=22,min=18,sec=30,isdst=false}
--year表示年,month表示月,day表示日期,hour表示小时,min表示分钟,sec表示秒,isdst表示是否夏令时
time=os.time(tab) -->返回值为1131286710
三、取得列表(table)格式的时间
tab=os.date("*t",time)
可以将一个数值格式的时间转换为字符串或者列表
其中第一个参数指定返回的格式,如果第一个参数指定为"*t"则返回一个table格式的时间。
第二个参数指定一个时间数值(以秒为单位)
1、获取当前时间的table格式
tab=os.date("*t")
如果不指定os.date的第二个参数,则返回当前时间的table表示格式
2、通过时间数值,获取指定时间的table格式
tab=os.date("*t",time)
通过os.date函数的第二个参数指定一个时间数值。
例如:
localtab=os.date("*t",1131286710);
--返回值tab的数据{year=2005,month=11,day=6,hour=22,min=18,sec=30}
--year表示年,month表示月,day表示日期,hour表示小时,min表示分钟,sec表示秒,isdst表示是否夏令时
--tab成包括一些其他的成员tab.yday表示一年中的第几天tab.wday表示星期几(星期天为1)
time=os.time(tab) -->返回值为1131286710
四、取得时间的字符串(string)格式
tab=os.date(format,time)
实际上与取得table格式的时间一样,同样是使用os.date参数,不同的是第一个参数
如果第一个参数不是"*t"os.date返回字符串
关于format参数使用的格式化语法,请参考:
string.ftime格式化语法
os.date的用法与 string.ftime 完全相同
例如:
win.consoleOpen()
print( os.date("todayis%A,in%B") )
print( os.date("%x",906000490) )
--输出类似这样的字符串09/16/1998
1、获取当前时间的字符串(string)格式
如果不指定os.date的第二个参数,则返回当前时间的table表示格式
例如:
str=os.date("*x")
2、通过时间数值,获取指定时间的(string)格式
通过os.date函数的第二个参数指定一个时间数值。
例如:
str=os.date("*x",1131286710)
3、获取时间的指定部份的(string)格式
例如:
str=os.date("%M") --返回当前时间分钟部份的字符串格式
五、时间数值与字符串之间的转换
请参考:
string.timestring.ftime函数用法
六、计算时间值间隔
int=os.difftime(t2,t1);
t2,t1都是数值格式的时间值,返回值也是一个数值表示间隔的时间。
参数以及返回的时间值都是以秒为单位的数值格式。
localtab={year=2005,month=11,day=6,hour=22,min=18,sec=30,isdst=false}
t1=os.time(tab)
tab.day=tab.day+1;--前进一天
t2=os.time(tab)
int=os.difftime(t2,t1);
win.messageBox(int.."秒","时间差"
七、系统时钟
int=os.tick();
读取系统时钟,以毫秒为单位。
表示从系统启动到当前时刻所过去的毫秒数。
int=os.clock()
读取系统时钟,以秒为单位。
表示从系统启动到当前时刻所过去的秒数。
注意
因为内部实现的差异,os.tick与os.clock()的返回值并不完全一致。
lua math库(2012-05-1817:
26:
28)
转载
▼
标签:
游戏
分类:
Lua
正文开始
atan2、sinh、cosh、tanh这4个应该用不到。
函数名
描述
示例
结果
pi
圆周率
math.pi
3.1415926535898
abs
取绝对值
math.abs(-2012)
2012
ceil
向上取整
math.ceil(9.1)
10
floor
向下取整
math.floor(9.9)
9
max
取参数最大值
math.max(2,4,6,8)
8
min
取参数最小值
math.min(2,4,6,8)
2
pow
计算x的y次幂
math.pow(2,16)
65536
sqrt
开平方
math.sqrt(65536)
256
mod
取模
math.mod(65535,2)
1
modf
取整数和小数部分
math.modf(20.12)
20 0.12
randomseed
设随机数种子
math.randomseed(os.time())
random
取随机数
math.random(5,90)
5~90
rad
角度转弧度
math.rad(180)
3.1415926535898
deg
弧度转角度
math.deg(math.pi)
180
exp
e的x次方
math.exp(4)
54.598150033144
log
计算x的自然对数
math.log(54.598150033144)
4
log10
计算10为底,x的对数
math.log10(1000)
3
frexp
将参数拆成x*(2^y)的形式
math.frexp(160)
0.625 8
ldexp
计算x*(2^y)
math.ldexp(0.625,8)
160
sin
正弦
math.sin(math.rad(30))
0.5
cos
余弦
math.cos(math.rad(60))
0.5
tan
正切
math.tan(math.rad(45))
1
asin
反正弦
math.deg(math.asin(0.5))
30
acos
反余弦
math.deg(math.acos(0.5))
60
atan
反正切
math.deg(math.atan
(1))
45
lua string 库(2012-09-1209:
25:
53)
转载
▼
标签:
杂谈
正文开始
--lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……。
--string库中所有的function都不会直接操作字符串,只返回一个结果。
--------------------------------------------------------------------------------------------------
【基本函数】
●
函数
描述
示例
结果
len
计算字符串长度
string.len("abcd")
4
rep
返回字符串s的n个拷贝
string.rep("abcd",2)
abcdabcd
lower
返回字符串全部字母大写
string.lower("AbcD")
abcd
upper
返回字符串全部字母小写
string.upper("AbcD")
ABCD
format
返回一个类似printf的格式化字符串
string.format("thevalueis:
%d",4)
thevalueis:
4
sub
returnssubstringfromindexitojofs
string.sub("abcd",2)
bcd
string.sub("abcd",-2)
cd
string.sub("abcd",2,-2)
bc
string.sub("abcd",2,3)
bc
find
在字符串中查找
string.find("cdcdcdcd","ab")
nil
string.find("cdcdcdcd","cd")
12
string.find("cdcdcdcd","cd",7)
78
gsub
在字符串中替换
string.gsub("abcdabcd","a","z");
zbcdzbcd2
string.gsub("aaaa","a","z",3);
zzza3
byte
返回字符的整数形式
string.byte("ABCD",4)
68
char
将整型数字转成字符并连接
string.char(97,98,99,100)
abcd
--------------------------------------------------------------------------------------------------
【基本模式串】
字符类
描述
示例
结果
.
任意字符
string.find("",".")
nil
%s
空白符
string.find("abcd","%s%s")
34
%S
非空白符
string.find("abcd","%S%S")
12
%p
标点字符
string.find("ab,.cd","%p%p")
34
%P
非标点字符
string.find("ab,.cd","%P%P")
12
%c
控制字符
string.find("abcd\t\n","%c%c")
56
%C
非控制字符
string.find("\t\nabcd","%C%C")
34
%d
数字
string.find("abcd12","%d%d")
56
%D
非数字
string.find("12abcd","%D%D")
34
%x
十六进制数字
string.find("efgh","%x%x")
12
%X
非十六进制数字
string.find("efgh","%X%X")
34
%a
字母
string.find("AB12","%a%a")
12
%A
非字母
string.find("AB12","%A%A")
34
%l
小写字母
string.find("ABab","%l%l")
34
%L
大写字母
string.find("ABab","%L%L")
12
%u
大写字母
string.find("ABab","%u%u")
12
%U
非大写字母
string.find("ABab","%U%U")
34
%w
字母和数字
string.find("a1()","%w%w")
12
%W
非字母非数字
string.find("a1()","%W%W")
34
--------------------------------------------------------------------------------------------------
【转义字符%】
字符类
描述
示例
结果
%
转义字符
string.find("abc%..","%%")
44
string.find("abc..d","%.%.")
45
--------------------------------------------------------------------------------------------------
【用[]创建字符集,"-"为连字符,"^"表示字符集的补集】
字符类
描述
示例
结果
[01]
匹配二进制数
string.find("32123","[01]")
33
[AB][CD]
匹配AC、AD、BC、BD
string.find("ABCDEF","[AB][CD]")
23
[[]]
匹配一对方括号[]
string.find("ABC[]D","[[]]")