如何在Lua中将字符串转换为整数?谢谢.
我有一个像这样的字符串:
a = "10"
Run Code Online (Sandbox Code Playgroud)
我希望将它转换为10,数字.
Nic*_*las 275
使用该tonumber功能.如在a = tonumber("10").
lhf*_*lhf 31
您可以通过在算术运算中使用字符串来强制进行隐式转换a= "10" + 0,但这不像tonumber显式使用那样清晰或干净.
Lua中的所有数字都是浮点数(编辑: Lua 5.2或更低).如果您真的想转换为"int"(或至少复制此行为),您可以这样做:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您显式地将字符串(或实际上,无论它是什么)转换为数字,然后截断数字,就像(int)强制转换在Java中一样.
编辑:这仍然适用于Lua 5.3,甚至认为Lua 5.3具有实数整数,因为math.floor()返回一个整数,而像run这样的运算符number // 1仍然会返回浮点数(如果number是浮点数).
小智 8
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Run Code Online (Sandbox Code Playgroud)
产量
string
number
Run Code Online (Sandbox Code Playgroud)
tonumber接受两个参数,第一个是转换为数字的字符串,第二个是 的基数e。
返回值tonumber以 10 为基数。
如果未base提供,则将数字转换为基数 10。
> a = '101'
> tonumber(a)
101
Run Code Online (Sandbox Code Playgroud)
如果提供了基数,它将其转换为给定的基数。
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Run Code Online (Sandbox Code Playgroud)
如果e包含无效字符则返回nil。
> --[[ Failed because base 2 numbers consist (0 and 1) --]]
> a = '112'
> tonumber(a, 2)
nil
>
> --[[ similar to above one, this failed because --]]
> --[[ base 8 consist (0 - 7) --]]
> --[[ base 10 consist (0 - 9) --]]
> a = 'AB'
> tonumber(a, 8)
nil
> tonumber(a, 10)
nil
> tonumber(a, 16)
171
Run Code Online (Sandbox Code Playgroud)
我回答考虑Lua5.3
小智 5
说您要变成数字的字符串在变量中 S
a=tonumber(S)
Run Code Online (Sandbox Code Playgroud)
假设有数字,并且其中只有数字S将返回数字,但是如果有任何非数字字符(浮点数除外),则将返回nil
更清晰的选择是使用tonumber。
从 5.3.2 开始,此函数将自动检测(有符号)整数、浮点数(如果存在点)和十六进制(整数和浮点数,如果字符串以“0x”或“0X”开头)。
以下片段较短但不等效:
a + 0 -- forces the conversion into float, due to how + works.
Run Code Online (Sandbox Code Playgroud)a | 0 -- (| is the bitwise or) forces the conversion into integer.
-- However, unlike `math.tointeger`, it errors if it fails.
Run Code Online (Sandbox Code Playgroud)应该注意的是,math.floor()总是向下舍入,因此对于负浮点值不会产生合理的结果。
例如,表示为整数的 -10.4 通常会被截断或四舍五入为 -10。然而 math.floor() 的结果并不相同:
math.floor(-10.4) => -11
Run Code Online (Sandbox Code Playgroud)
对于带有类型转换的截断,以下辅助函数将起作用:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Run Code Online (Sandbox Code Playgroud)
参考:http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html