lua—Number与算术操作运算

1,303 阅读2分钟

Number

  • lua5.3版本开始,number分为整型int(64)和双精度浮点型float类型,对于资源受限的平台可使用int(32)。

  • 两种类型可转换,同时具有相同值的两种类型相等,可使用**math.type()**来获取类型。

  • 在lua5.3中,支持0x开头的十六进制常量。 还支持十六进制浮点数,由小数部分和以P或P开头的指数部分组成。

例如:

0xff -> 255

0x1p-1 -> 0.5

0xa.bp2 -> 42.75

注意:这里的p代表的2不是10 !

  • 可使用%a参数,通过函数string.format(“%a”,419)对这种格式进行格式化输出。 

例如: 

string.format(“%a”,419) -> 0x1.a3p+8

虽然这种格式很难阅读,但是这种格式可以保留所有浮点数的精度,并且比十进制的转换速

度更快。

算术操作运算

除了加(+)、 减(-) 、乘(*)、 除(/) 、取负数(-)等常见的算术运算外,lua语言还支持 取整除法[floor除法](//)、取模(%)、幂指运算(^)。

规则:两个操作数都是整型,那么结果也是整型;否作,结果就是浮点型值。 

  • 除法不遵循:由于整数相除结果并不一定是整数,因此除法不遵循上诉规则。为避免两个整型值相除和两个浮点型值相除导致结果不一致,除法运算操作的永远是浮点数且产生浮点型值的结果。 

例如:

3.0/2.0 --> 1.5 (lua 5.3) 1.5 (lua 5.1)

3/2 --> 1.5 (lua 5.3) 1.5 (lua 5.1)

3.0/1 --> 3.0 (lua 5.3) 3 (lua 5.1)

3.0/1 --> 3.0 (lua 5.3) 3 (lua 5.1)

  • 取整除法遵循:floor除法会对得到的商向负无穷取整,从而保证结果都是一个整数。

例如:

3//2 --> 1

3.0//2 --> 1.0

6//2 --> 3

-9//2 --> -5

  •  取模运算遵循:如果操作数是整数,那么取模运算的结果也是整数。

  • 取模运算的定义:a % b == a – ((a // b) * b)

  • 对于整型操作数而言,取模运算的结果符号永远与第二个操作数的符号保持一致。对于任意的正常量K,即使x是负数,表达式x%K的结果永远在[0~K-1]之间。

         例如:

         7%3 -->  1

         -7%3 --> 2

         7%-3 -->  -2

不同编程语言对于负数取余的定义不一样,所得到的结果也不一样,所以小编在这里建议尽量不要对负数取余。