Lua 字符串转 int

Posted

技术标签:

【中文标题】Lua 字符串转 int【英文标题】:Lua string to int 【发布时间】:2012-06-13 07:04:01 【问题描述】:

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

我有一个这样的字符串:

a = "10"

我想把它转换成 10,这个数字。

【问题讨论】:

精确链接是强制转换部分:5.1, 5.2。 Lua 只是自动在字符串和数字之间进行转换。如果要确保类型,请使用 a = tonumber(a)。 【参考方案1】:

使用tonumber function。如a = tonumber("10")

【讨论】:

在 Lua 5.3 中,(64 位默认)整数被相应地处理(lua.org/manual/5.3/manual.html):“带有小数点或指数的数字常量表示浮点数;否则表示整数。” 【参考方案2】:

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

【讨论】:

不,它会将“10”转换为整数,然后添加 0。 (不过,缺乏清晰度是使用tonumber 的更多理由!) @Rena,不乏清晰度。 + 总是显式加法,.. - 连接。 @lhf:自动强制仅适用于数字。并且比较运算符 (== ~= =) 不会转换它们的参数。出于性能原因,您应该避免过度依赖自动强制【参考方案3】:
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

输出

   string                                                                                                                                                                          
   number

【讨论】:

【参考方案4】:

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 这样的运算符在 @ 时仍将返回一个浮点数987654324@ 是一个浮点数。

【讨论】:

【参考方案5】:

说你要转成数字的字符串在变量S

a=tonumber(S)

如果S中有数字且只有数字,它会返回一个数字, 但是如果有任何不是数字的字符(浮点数除外) 它会返回 nil

【讨论】:

【参考方案6】:

更清晰的选择是使用tonumber

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

以下 sn-ps 较短但不等价:

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.

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

tonumber (e [, base])

tonumber 有两个参数,第一个是转换为数字的字符串,第二个是e 的基数。

返回值 tonumber 以 10 为底。

如果没有提供base,它会将数字转换为基数 10。

> a = '101'
> tonumber(a)
101

如果提供了基数,则将其转换为给定的基数。

> 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

【讨论】:

【参考方案9】:

您可以制作一个访问器,将“10”保留为 int 10。

例子:

x = tonumber("10")

如果你打印 x 变量,它将输出一个 int 10 而不是 "10"

和 Python 进程一样

x = int("10")

谢谢。

【讨论】:

【参考方案10】:

我建议检查 Hyperpolyglot,有一个很棒的比较:http://hyperpolyglot.org/

http://hyperpolyglot.org/more#str-to-num-note

ps。实际上 Lua 转换成双精度而不是整数。

数字类型表示实数(双精度浮点数) 数字。

http://www.lua.org/pil/2.3.html

【讨论】:

【参考方案11】:
Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> math.floor("10");
10
> tonumber("10");
10
> "10" + 0;
10.0
> "10" | 0;
10

【讨论】:

【参考方案12】:

从 lua 5.3 开始,有一个新的math.tointeger 函数用于字符串到整数。仅用于整数,没有浮点数。

例如:

print(math.tointeger("10.1")) -- nil
print(math.tointeger("10")) -- 10

如果要转换整数和浮点数,tonumber 函数更合适。

【讨论】:

【参考方案13】:

您可以使用tonumber 函数,就像使用tostring 函数一样,下面是如何使用它:

local x = tonumber("45")
print(x)

结果应该是45

【讨论】:

【参考方案14】:

这是你应该放的东西

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20

【讨论】:

a = tonumber(stringnumber) 就足够了【参考方案15】:

Lua 数字类型是双精度类型,在 luaconf 中实现。 h 详细 一般有两种选择:

    [推荐使用] 5.3版的Lua脚本包含global.lua文件,包含tonumber()tostring()方法,可以实现数字的转换和字符串。 math.tointeger()也可以用这个方法转成数字。

但是根据你的实际场景,如果只是计算,Lua可以按照这个操作符号进行转换。例如

  s = "1" + 2; -- lua will convert "1" to 1
  print(s)

  s1 = "e" + 3; -- error
  print(s1)

更多关于lua,可以看lua official document

希望对您有用,期待您的回复,期待与您进一步交流!

【讨论】:

以上是关于Lua 字符串转 int的主要内容,如果未能解决你的问题,请参考以下文章

lua 学习

Lua标准库(转)

lua脚本怎么取出自己想要的的部分字符?

lua可以对单个字符和数字之间进行转换吗

Lua - 字符串行为的数字

lua语言如何替换多个字符并记录替换位置和替换内容