如何在Lua中将字符串转换为整数?
我有一个像这样的字符串:
a = "10"
我希望将其转换为10。
如何在Lua中将字符串转换为整数?
我有一个像这样的字符串:
a = "10"
我希望将其转换为10。
Answers:
使用tonumber
功能。就像在a = tonumber("10")
。
您可以像在中那样通过在算术运算中使用字符串来强制进行隐式转换a= "10" + 0
,但这并不像tonumber
显式使用那样清晰明了。
tonumber
!)
+
始终是显式加法..
-串联。
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
输出量
string
number
Lua中的所有数字都是浮点数(编辑: Lua 5.2或更小)。如果您确实要转换为“ int”(或至少复制此行为),则可以执行以下操作:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
在这种情况下,您可以将字符串(或实际上,无论它是什么)显式转换为数字,然后像Java中的(int)强制转换一样截断数字。
编辑:这仍然在Lua 5.3中有效,即使以为Lua 5.3具有实数也可以math.floor()
返回整数,而运算符如number // 1
仍将返回浮点数(如果number
是浮点数)。
更清晰的选择是使用tonumber。
从5.3.2版本开始,此函数将自动检测(带符号的)整数,浮点数(如果存在点)和十六进制(整数和浮点数,如果字符串以“ 0x”或“ 0X”开头)。
以下代码段较短,但不等效:
a + 0 -- forces the conversion into float, due to how + works.
a | 0 -- (| is the bitwise or) forces the conversion into integer.
-- However, unlike `math.tointeger`, it errors if it fails.
应当指出,math.floor()
总是四舍五入,因此对于负浮点值不会产生明智的结果。
例如,表示为整数的-10.4通常会被截断或舍入为-10。但是math.floor()的结果并不相同:
math.floor(-10.4) => -11
对于使用类型转换的截断,以下辅助函数将起作用:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
参考:http : //lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
我建议检查Hyperpolyglot,它有一个很棒的比较:http : //hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps。实际上,Lua转换为双精度而不是整数。
数字类型表示实数(双精度浮点数)。
tonumber
接受两个参数,第一个是转换为数字的字符串,第二个是的基数e
。
返回值tonumber
以10为底。
如果未base
提供,它将数字转换为基数10。
> a = '101'
> tonumber(a)
101
如果提供了base,它将其转换为给定的base。
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
如果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
我回答了考虑Lua5.3