Lua字符串到int
如何在Lua中将字符串转换为整数 我有这样一个字符串:Lua字符串到int,lua,Lua,如何在Lua中将字符串转换为整数 我有这样一个字符串: a = "10" 我希望将其转换为10,即数字。使用。正如在a=tonumber(“10”)中一样,您可以通过在算术运算中使用字符串强制进行隐式转换,就像在a=“10”+0中一样,但这并不像显式使用tonumber那样清晰。Lua中的所有数字都是浮点数(编辑:Lua 5.2或更少)。如果您确实希望转换为“int”(或至少复制此行为),可以执行以下操作: local function ToInteger(number) return
a = "10"
我希望将其转换为10,即数字。使用。正如在
a=tonumber(“10”)
中一样,您可以通过在算术运算中使用字符串强制进行隐式转换,就像在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
在这种情况下,您可以显式地将字符串(或者实际上,不管它是什么)转换为一个数字,然后像Java中的(int)转换一样截断该数字
编辑:这在Lua5.3中仍然有效,即使Lua5.3有实整数,因为
math.floor()
返回一个整数,而如果number//1
等运算符是浮点,则仍然会返回浮点 我建议检查Hyperpolyglot,它有一个很棒的比较:
实际上,Lua转换为double而不是int
数字类型表示实数(双精度浮点)
数字
假设要转换为数字的字符串在变量
S
a=tonumber(S)
如果在S
中有数字且只有数字,它将返回一个数字,
但如果有任何字符不是数字(浮动的句点除外)
它将返回零
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
输出
string
number
您可以创建一个访问器,将“10”保持为int 10 例如:
x = tonumber("10")
如果打印x变量,它将输出int 10而不是“10”
和Python进程一样
x=int(“10”)
谢谢。更清晰的选项是使用数字 从5.3.2开始,此函数将自动检测(有符号)整数、浮点(如果存在点)和十六进制(如果字符串以“0x”或“0x”开头,则同时检测整数和浮点) 以下代码段较短,但不等效:
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20
应该注意的是,
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
函数到INTEGER(x)
num=tonumber(x)
返回num<0和math.ceil(num)或math.floor(num)
结束
参考资料:
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,因为Lua5.3有一个新的
math.tointeger
函数用于字符串到整数的转换。只针对整数,没有浮点
例如:
print(math.tointeger(“10.1”)--nil
打印(math.tointeger(“10”)--10
如果要转换整数和浮点,则更适合使用
tonumber
函数。精确链接是关于强制的部分:,。Lua只是自动在字符串和数字之间进行转换。如果您想确保类型,请使用a=tonumber(a)。在Lua5.3中,(64位默认值)整数被相应地处理():“带有小数点或指数的数值常量表示浮点;否则表示整数。”不,它将把“10”转换为整数,然后再向其添加0。(尽管如此,缺乏清晰性是使用tonumber
的更多理由!)@Rena,这并不缺乏清晰性+
始终是显式加法,。
-串联。@lhf:自动强制仅对数字有效。和比较运算符(=~=<>=)不转换其参数。出于性能原因,您应该避免过于依赖自动强制。mucha=tonumber(stringnumber)就足够了
> a = '101'
> tonumber(a)
101
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
> --[[ 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