Lua字符串转整数

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

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

a =“10

我希望将其转换为数字10。

点赞
用户734069
用户734069

使用 tonumber 函数。例如 a = tonumber("10")

2012-06-09 15:14:21
用户107090
用户107090

你可以通过将字符串用于算术运算来强制进行隐式转换,如 a= "10" + 0,但这并不像显式使用 tonumber 那么清晰或干净。

2012-06-09 18:52:16
用户1233162
用户1233162

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 具有真正的整数,这仍然适用,因为 math.floor() 返回整数,而像 number // 1 这样的操作符仍然会返回一个浮点数,如果 number 是一个浮点数。

2014-08-28 15:08:53
用户2555321
用户2555321

我推荐查看 Hyperpolyglot,它有一个很棒的比较:http://hyperpolyglot.org/

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

ps. 实际上 Lua 转换成的是双精度浮点数,而不是整数。

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

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

2014-11-28 16:19:20
用户4660461
用户4660461

假设你要将字符串转换成数字,字符串存储在变量 S 中:

a=tonumber(S)

只要 S 中包含数字且仅包含数字,它将返回一个数字。 但如果存在任何非数字的字符(小数点除外),它将返回 nil

2015-03-12 16:36:26
用户88888888
用户88888888
局部变量a = “10“
打印(type(a))
局部变量num = tonumber(a)
打印(type(num))

输出

   字符串
   数字
2015-03-26 16:34:00
用户5107566
用户5107566

你可以创建一个访问器将“10”保留为整数10。

示例:

x = tonumber("10")

如果打印x变量,它将输出一个整数10,而不是“10”

和Python进程一样

x = int("10")

谢谢。

2015-07-12 09:19:31
用户6242045
用户6242045

更清晰的选项是使用tonumber。 从5.3.2开始,该函数将自动检测(有符号)整数,浮点数(如果有小数点)和十六进制(整数和浮点数,如果字符串以“0x”或“0X”开头)。 以下代码片段更短,但不等同:

  • a + 0 --由于+的工作方式,强制转换为浮点数。
    
  • a | 0 --(|是按位或)强制转换为整数。
    --但是,与`math.tointeger`不同,如果失败,它会引发错误。
    
2016-04-29 18:13:48
用户7305540
用户7305540

以下是应该放置的内容:

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

输出结果:

20
2016-12-16 22:41:41
用户9801416
用户9801416
Lua 5.3.1  版权所有 (C) 1994-2015 Lua.org,PUC-Rio
> math.floor("10");
10 // 将字符串 "10" 转换成数字并向下取整,结果为 10
> tonumber("10");
10 // 将字符串 "10" 转换成数字,结果为 10
> "10" + 0;
10.0 // 将字符串 "10"0,结果为 10.0
> "10" | 0;
10 // 将字符串 "10" 转换成整数,结果为 10
2018-07-01 14:49:26
用户9216142
用户9216142

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

2018-07-17 18:05:56
用户5306039
用户5306039

tonumber (e [, base]) tonumber函数接受两个参数,第一个参数是要转换为数字的字符串,第二个参数是e的基数。

tonumber函数的返回值是十进制数。

如果没有提供base,则将数字转换为十进制。

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

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

> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>

如果e包含无效字符,则返回nil

> --[[ 由于基数为2的数字仅包含(0和1),因此失败--]]
> a = '112'
> tonumber(a, 2)
nil
>
> --[[ 类似于上面的例子,由于--]]
> --[[ 基数8包含(0-7),基数10包含(0-9)--]]
> a = 'AB'
> tonumber(a, 8)
nil
> tonumber(a, 10)
nil
> tonumber(a, 16)
171

我回答时考虑的是Lua5.3。

2019-07-03 10:07:26
用户8294610
用户8294610

从 lua 5.3 开始,有一个新的 math.tointeger 函数,用于将字符串转换为整数。只适用于整数,不能处理浮点数。

例如:

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

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

2021-02-03 06:00:40
用户10399467
用户10399467

Lua 的数字类型是双精度类型,详细实现在 luaconf.h 中。常用的有两种方法:

  1. [推荐使用] 在 Lua 中的 版本 5.3 中,通过 tonumber()tostring() 方法可以实现数字和字符串之间的转换,其中全局文件 global.lua 包含这些方法。
  2. 使用 math.tointeger() 方法也可以将数值类型转换为整型。

然而,根据你的实际场景,如果仅仅需要进行计算,Lua 可以根据运算符进行自动转换,例如:

  s = "1" + 2; -- Lua 会将 "1" 转换为 1
  print(s)

  s1 = "e" + 3; -- 报错
  print(s1)

更多关于 Lua 的信息可以参考 Lua 官方文档。希望这对你有所帮助,期待你的回复,并期待与你进一步交流!

2021-09-21 05:35:45
用户15246414
用户15246414

你可以使用 tonumber() 函数将字符串转换为数字,可以是浮点数或整数。

例如: tonumber("11") -- 返回:11

2022-05-28 02:17:36