0X15类型转换
前置知识
正文
- 至此为止你应该已经接触过了Lua的8种值类型中的4种:number,boolean,string,nil。
- 各种类型的值之间有一些对应关系,因而可以进行转换。其中的一些转换已经在介绍值的运算的时候介绍过。这里再做一些补充。
- 把其他类型的值转化为字符串,可以使用预定义函数tostring。尝试以下代码:
>
>type(tostring(nil))
>x=tostring(123)
>type(x)
>x=='123'
>
- 如果有一个字符串,需要转换为数字。使用tonumber函数。例如:
>
>str='12.34'
>x=tonumber(str)
>type(x)
>
- 同样的一个字符串'1234'作为十进制理解和作为十六进制理解是不一样的。因此tonumber可以接收第二个参数。第二个参数是个整数,用于表示进制。
>
>tonumber('1234',10)
>tonumber('1234',16)
>
如果字符串不适合转化成数,这个函数会返回nil。
- number类型还需要特别说明一下。这个类型包括两个小类型——整数和实数(实数也称为浮点数)。由于Lua中存在比较完整的转换机制所以我们可以不必刻意关注二者的区别。必要的时候,为了确保用到整数,可以使用以下函数:
- math.ceil (x) 向上取整。返回最小的一个大于或者等于x的整数。例如math.ceil(6.3)返回整数7。
- math.floor (x) 向下取整。返回最大的一个小于或者等于x的整数。其结果等于x//1。例如math.floor^6.3)返回6。
- math.tointeger (x) 如果x是一个小数部分全为零的浮点数。返回其对应的整数。否则返回nil。例如math.tointeger(6.3)返回nil,但math.tointeger(6.0)返回6。
- 要准确判断一个数值是整数还是浮点数使用函数math.type。它接受一个变量,依据其类型返回'float'或'integer'。
- 要分离一个浮点数的整数部分和小数部分使用函数math.modf。它接受一个数值,返回两个值。第一个是实参的整数部分,第二个是实参的小数部分。
>
>theInt,theFraction=math.modf(6.57)
>
- 对于学过C语言等语言,了解整数和浮点数存储方式的读者,请注意以下几点:
- Lua中的整数和浮点数都是64位(64 bits)。
- math.maxinteger和math.mininteger是两个预定义的值分别表示64位的整数能存储的最大有符号整数和最小有符号整数。注意这两个是整数变量,而不是函数。
- math.ult(m,n)这个函数把m和n作为无符号整数比较。如果m小于n,则返回true。否则返回false。
- 另外还有一个预定义变量需要补充:math.huge,它被赋予了一个浮点值,这个值相当于数学上的正无穷大。它和任何其他数值相加减得它本身。它作为分母,则值为0。
- 至此为止逻辑值和数值的相关内容已经基本介绍完了。接下来你可以在三个分支之间选择——继续学习字符串的处理、进一步探讨变量和函数、学习表和数据结构。
后续推荐
- 0X16字符串处理
- 0X17函数为值
- 0X18简单的表