Lua字符串为int

Dav*_*mes 170 lua

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

我有一个像这样的字符串:

a = "10"
Run Code Online (Sandbox Code Playgroud)

我希望将它转换为10,数字.

Nic*_*las 275

使用该tonumber功能.如在a = tonumber("10").

  • 在Lua 5.3中,(64位默认值)整数被相应地处理(http://www.lua.org/manual/5.3/manual.html):"带小数点或指数的数字常量表示浮点数;否则它表示一个整数." (4认同)

lhf*_*lhf 31

您可以通过在算术运算中使用字符串来强制进行隐式转换a= "10" + 0,但这不像tonumber显式使用那样清晰或干净.

  • @Rena,不乏清晰度.`+`总是明确地添加,`..` - 连接. (15认同)
  • 不,它会将"10"转换为整数然后再加0.(虽然缺乏清晰度,但更多的理由是使用`tonumber`!) (2认同)
  • @lhf:自动强制仅适用于数字。比较运算符 (== ~= < > <= >=) 不会转换其参数。出于性能原因,您应该避免过多依赖自动强制 (2认同)

Sto*_*ept 8

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)


shu*_*ham 7

tonumber (e [, base])

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


4xe*_*xel 5

更清晰的选择是使用tonumber

从 5.3.2 开始,此函数将自动检测(有符号)整数、浮点数(如果存在点)和十六进制(整数和浮点数,如果字符串以“0x”或“0X”开头)。

以下片段较短但不等效:


Les*_*use 5

应该注意的是,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