如何检查输入是否为数字

how to check if an input is a number

如何检查输入是否为数字?我的理论是这样的:

local isNumber = tonumber(arg[1])

if isNumber then
print"This is sure a number"
else
print"This is not a number"
end

那么,你怎么看?

如果 tonumber(arg[1]) 不 return nil,

arg[1] 表示一个数字。因此,例如,这也适用于字符串 "1"

如果要确定是数值检查type(arg[1]) == "number"

https://www.lua.org/manual/5.4/manual.html#pdf-tonumber

https://www.lua.org/manual/5.4/manual.html#pdf-type

如果您想知道一个数字是整数还是浮点数,请使用 math.type()

> type(math.pi) -- Normal
number
> math.type(math.pi) -- Extended
float
> math.type(math.maxinteger) -- Never puts out only "number"
integer
-- For checking with pcall() and assert() do
> do
>> local rc,res=pcall(assert,math.type(math.pi)=='float')
>> if rc and res then
>> return math.deg(math.pi),rc,res
>> else
>> error('Try something else')
>> end
>> end
180.0   true    true

最后一个 do ... end 块显示了 Lua 等同于其他语言中已知的“Try/Catch”异常处理。

local isNumber = arg[1]
if type(isNumber) ~= "number" then isNumber = tonumber(isNumber) end