0X15类型转换

前置知识

  • 0X13变量与值

正文

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

后续推荐

  • 0X16字符串处理
  • 0X17函数为值
  • 0X18简单的表