数值常量
4 --> 4
4.57e-3 --> 0.00457 en代表*10的n次方 e-3 表示10的-3次方
整型值和浮点型值类型都是"number",可以相互转换
type(3) --> number
type(3.5) --> number
type(3.0) --> number
1 == 1.0 --> true
-3 == -3.0 --> true
0.2e3 == 200 --> true
需要区分整型值和浮点型值,可使用函数math.type
math.type(3) --> integer
math.type(3.0) --> float
Lua中0x开头代表十六进制常量
0xff --> 255
0x1A3 --> 419
格式化输出,通过函数string.format
,并使用参数%a
string.format("%a", 419) --> 0x1.a3p+8
string.format("%a", 0.1) --> 0x1.999999999999ap-4
算术运算符
常见的加、减、乘、除、取负数等
15 + 35 --> 28
13.0 + 15.0 --> 28.0
如果两个操作数都是整型值,那么结果也是整型值;否则,结果就是浮点型值。当操作数一个是整型值一个是浮点型值时,Lua语言会在进行算术运算前先将整型值转换为浮点型值:
13.0 + 25 --> 38.0
-(3 * 6.0) --> -18.0
两数相除,不一定是整数,所以除法不遵循上述规则,除法运算符永远是浮点型
3.0 / 2.0 --> 1.5
3 / 2 --> 1.5
6 / 2 --> 3.0
Lua5.3针对整数除法引入了称为floor除法的新算术运算符//
floor除法会对得到的商翔负无穷取整,从而保证结果是一个整数
规则 :如果操作数都是整型值,那么结果就是整型值,否则就是浮点值(其值是一个整数)
3 // 2 --> 1
3.0 // 2 --> 1.0
6 // 2 --> 3
6.0 // 2.0 --> 3.0
取模也遵循上述规则
x = math.pi
x - x % 0.01 --> 3.14
x - x % 0.001 --> 3.141
幂运算
20 ^ 2 --> 400.0
关系运算符
<、>、<=、>=、==、~=
都是Boolean类型
~=
用于不相等
数学库
Lua提供标准数学库math
函数math.random
用于生成伪随机数,默认范围是[0, 1)
取整函数
floor
: 向负取无穷取整
ceil
:向正无穷取整
modf
:向零取整,也会返回小数部分
math.floor(3.3) --> 3
math.floor(-3.3) --> -4
math.ceil(3.3) --> 4
math.ceil(-3.3) --> -3
math.modf(3.3) --> 3 0.3
math.modf(-3.3) --> -3 -0.3
math.floor(2^70) --> 1.1805916207174e+021
整型强制转浮点型
可用增加0.0的方法
-3 + 0.0 --> 3.0
绝对值超过整型值,可能会导致浮点型精度损失
浮点型转整型,可通过math.tointeger
math.tointeger(-258.0) --> -258
math.tointeger(2^30) --> 1073741824
math.tointeger(5.01) --> nil 不是整数值
math.tointeger(2^64) --> nil 超出范围 Lua中整型值范围是64位,最大值是2^63 - 1
运算符优先级
^
一元运算符(-、#(返回字符长度,如:#"Hello"返回5)、~、not)
* / // %
+ -
.. (拼接字符串,如:"Hello".."World"="HelloWorld",其它语言是加法运算符)
<< >> (按位移位)
& (按位与)
~ (按位异或)
< > <= >= ~= ==
and
or
二元运算符中,除了幂运算(^)和连接操作符(..)是有结合外,其它运算符都是左结合
a + i < b / 2 + 1 等价 (a + i) < ((b / 2) + 1)
5 + x^2 * 8 等价 5 + ((x^2) * 8)
a < y and y <= z 等价 (a < y) and (y <== z)