Lua字符串到int

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

如何在Lua中将字符串转换为整数

我有这样一个字符串:

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