223

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

我有一个这样的字符串:

a = "10"

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

4

15 回答 15

350

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

于 2012-06-09T15:14:21.617 回答
39

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

于 2012-06-09T18:52:16.900 回答
10
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

Output

   string                                                                                                                                                                          
   number
于 2015-03-26T16:34:00.510 回答
10

Lua 中的所有数字都是浮点数(编辑: Lua 5.2 或更低版本)。如果您真的想转换为“int”(或至少复制此行为),您可以这样做:

local function ToInteger(number)
    return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end

在这种情况下,您将字符串(或实际上,无论它是什么)显式转换为数字,然后像 (int) 强制转换在 Java 中所做的那样截断该数字。

编辑:这在 Lua 5.3 中仍然有效,即使 Lua 5.3 有真正的整数,因为它math.floor()返回一个整数,而像这样的运算符number // 1如果是浮点数,仍然会返回一个number浮点数。

于 2014-08-28T15:08:53.543 回答
6

say the string you want to turn into a number is in the variable S

a=tonumber(S)

provided that there are numbers and only numbers in S it will return a number, but if there are any characters that are not numbers (except periods for floats) it will return nil

于 2015-03-12T16:36:26.093 回答
5

应该注意的是,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-17T18:05:56.640 回答
5

更清晰的选择是使用tonumber

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

以下片段较短但不等效:

  • 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.
    
于 2016-04-29T18:13:48.167 回答
4

tonumber (e [, base])

tonumber takes two arguments, first is string which is converted to number and second is base of e.

Return value tonumber is in base 10.

If no base is provided it converts number to base 10.

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

If base is provided, it converts it to the given base.

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

If e contains invalid character then it returns 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

I answered considering Lua5.3

于 2019-07-03T10:07:26.010 回答
3

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

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

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

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

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

于 2014-11-28T16:19:20.677 回答
3

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

例子:

x = tonumber("10")

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

和 Python 进程一样

x = int("10")

谢谢。

于 2015-07-12T09:19:31.693 回答
1

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

例如:

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

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

于 2021-02-03T06:00:40.107 回答
1

您可以使用该tonumber功能,就像您如何使用该tostring功能一样,以下是如何使用它:

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

结果应该是45

于 2021-08-24T18:06:23.317 回答
1
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
于 2018-07-01T14:49:26.070 回答
0

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

  1. 【推荐使用】5.3版本的Lua脚本包含global.lua文件,里面包含了tonumber()andtostring()方法,可以实现数字和字符串的转换。
  2. math.tointeger()也可以用这种方法转换成数字。

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

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

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

更多关于lua,可以看lua官方文档

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

于 2021-09-21T05:35:45.240 回答
0

这是你应该放的

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

output:

20
于 2016-12-16T22:41:41.537 回答