Lua 的 tonumber 函数

Lua 的 tonumber 函数 是 Lua 标准库中用于将值转换为数字类型的重要函数。它的完整语法如下:

lua 复制代码
tonumber(e [, base])

功能说明

tonumber 函数尝试将参数 e 转换为数字类型:

  1. 如果 e 已经是数字,则直接返回该数字
  2. 如果 e 是字符串且可以被解释为数字,则返回对应的数值
  3. 其他情况返回 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 (包含非数字字符)

注意事项

  1. 字符串中的前导和尾随空格会被忽略
  2. 字符串中包含任何非数字字符(在指定进制下)会导致转换失败
  3. 对于浮点数,Lua 遵循 IEEE 754 标准
  4. 大整数可能会损失精度,取决于 Lua 实现(5.3+ 版本支持 64 位整数)

实际应用场景

  1. 用户输入验证
lua 复制代码
local input = io.read()
local num = tonumber(input)
if num then
    print("有效的数字:", num)
else
    print("无效的输入")
end
  1. 配置文件解析
lua 复制代码
local config = {
    timeout = "30",
    retries = "3"
}

-- 安全转换为数字
config.timeout = tonumber(config.timeout) or 30
config.retries = tonumber(config.retries) or 3
  1. 不同进制转换工具
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
相关推荐
派葛穆3 小时前
Unity-UI 输入框功能
ui·unity·游戏引擎
玖玥拾3 小时前
Unity3D RPG 入门项目(一)开场动画/人物移动/摄像机跟随场景切换
unity·游戏引擎
魔力女仆4 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915534 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
麻瓜老宋5 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
颜酱5 小时前
07 | 把字段与指标同步到 Qdrant(生成阶段)
前端·人工智能·后端
Larcher6 小时前
从“加载模型”界面到端侧推理:拆解一个 React + WebGPU 大模型 Demo
javascript·后端
FellAveal6 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
xqqxqxxq6 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
Larcher6 小时前
从状态快照到惰性初始化:读懂 React useState 的三个关键场景
javascript·人工智能·后端