Lua 的 tonumber 函数 是 Lua 标准库中用于将值转换为数字类型的重要函数。它的完整语法如下:
lua
tonumber(e [, base])
功能说明
tonumber 函数尝试将参数 e 转换为数字类型:
- 如果
e已经是数字,则直接返回该数字 - 如果
e是字符串且可以被解释为数字,则返回对应的数值 - 其他情况返回
nil
参数说明
e: 要转换的值,可以是任何类型base(可选): 指定数字的进制基数,范围是 2-36。默认情况下(不指定或为10)会按十进制解析
使用示例
基本用法
lua
print(tonumber("123")) -- 输出: 123
print(tonumber("123.45")) -- 输出: 123.45
print(tonumber("abc")) -- 输出: nil
print(tonumber(true)) -- 输出: nil
使用不同进制
lua
print(tonumber("1010", 2)) -- 二进制转十进制,输出: 10
print(tonumber("FF", 16)) -- 十六进制转十进制,输出: 255
print(tonumber("ZZ", 36)) -- 36进制转十进制,输出: 1295
处理前导/后置空格
lua
print(tonumber(" 123 ")) -- 输出: 123 (前后空格会被忽略)
print(tonumber("123abc")) -- 输出: nil (包含非数字字符)
注意事项
- 字符串中的前导和尾随空格会被忽略
- 字符串中包含任何非数字字符(在指定进制下)会导致转换失败
- 对于浮点数,Lua 遵循 IEEE 754 标准
- 大整数可能会损失精度,取决于 Lua 实现(5.3+ 版本支持 64 位整数)
实际应用场景
lua
local input = io.read()
local num = tonumber(input)
if num then
print("有效的数字:", num)
else
print("无效的输入")
end
lua
local config = {
timeout = "30",
retries = "3"
}
-- 安全转换为数字
config.timeout = tonumber(config.timeout) or 30
config.retries = tonumber(config.retries) or 3
lua
function convertBase(numStr, fromBase, toBase)
local num = tonumber(numStr, fromBase)
if not num then return nil end
return string.format("%x", num) -- 示例:转为16进制字符串
end