Lua base tonumber()

转换数字.jpg

前言

重新开始更新的第一天,我们来聊一个轻松一点的函数,tonumber()这是个将指定参数转换成数字的函数,利用这个函数可以做一下数字进制的转换,使用起来比较方便。

内容


tonumber

  • tonumber(e [, base])
  • 解释:这个函数会尝试将它的参数转换为数字,如果参数已经是一个数字或者是一个可以转换成数字的字符串,那么这个函数就会返回转换后的数字,否者返回nil表示无法转换。这个函数有一个额外的参数base可以来指定参数的进制,它的取值范围是[2,36],当这个参数超过10的时候,使用A代表10(大小写都可以),B代表11,以此类推最后Z代表35,默认的这个参数是10,数字能有一个小数部分,也会有一个指数部分,只有可识别的整数可以被接受。

usage

  • 首先我们新建一个文件将文件命名为tonumbertest.lua然后编写代码如下:
-- 定义一个等待转换的列表
local wait_list = { 
    a = 13,
    b = "36",
    c = "52s",
    d = false,
    e = function() print("e") end,
    f = 32,
    g = "A3",
}


-- 转换已经是数字的变量
print("\nwait_list.a =", tonumber(wait_list.a))

-- 转换全是数字的字符串
print("\nwait_list.b =", tonumber(wait_list.b))

-- 转换包含字母的字符串
print("\nwait_list.c =", tonumber(wait_list.c))

-- 转换值为false的变量
print("\nwait_list.d =", tonumber(wait_list.d))

-- 转换值保存函数的变量
print("\nwait_list.e =", tonumber(wait_list.e))


-- 将数字看成二进制来转换=3*2+2 什么玩意,2进制出现3,错误!
print("\nwait_list.f(2) =", tonumber(wait_list.f, 2))

-- 将数字看成四进制来转换=3*4+2
print("wait_list.f(4) =", tonumber(wait_list.f, 4))

-- 将数字看成八进制来转换=3*8+2
print("wait_list.f(8) =", tonumber(wait_list.f, 8))


-- 将数字看成十进制来转换=A*10+3 什么玩意,10进制出现A,错误!
print("\nwait_list.g(10) =", tonumber(wait_list.g, 10))

-- 将数字看成十六进制来转换=A*16+3
print("wait_list.g(16) =", tonumber(wait_list.g, 16))

-- 将数字看成32进制来转换=A*32+3
print("wait_list.g(32) =", tonumber(wait_list.g, 32))
  • 运行结果
base_tonumber.png

总结

  • 观察变量ab的值可知,再不改变函数的第二个参数时,数字和数字字符串可以成功转换成10进制数。
  • 变量bcd因为进制或变量类型等原因无法成功转换而返回nil
  • 变量fg都因为不是指定进制下的合法数字,所以返回nil,比如wait_list.f=32,如果用二进制解析就是错误的,二进制中没有2和3。
  • 变量fg后两种都是正常的转换,通过注释的内容就可以看到,比如wait_list.g="A3",如果把它看成16进制,那么A就是10,所有结果是10*16+3,也就是163。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容