如何在 Lua 中将字符串转换为整数?
我有一个这样的字符串:
a = "10"
我希望将其转换为数字 10。
使用tonumber
功能。如a = tonumber("10")
.
您可以通过在算术运算中使用字符串来强制进行隐式转换a= "10" + 0
,但这并不像使用tonumber
显式那样清晰或干净。
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Output
string
number
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
浮点数。
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
应该注意的是,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
更清晰的选择是使用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.
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
我建议检查 Hyperpolyglot,有一个很棒的比较:http ://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
附言。实际上 Lua 转换成双精度数而不是整数。
number 类型表示实数(双精度浮点数)。
您可以制作一个访问器以将“10”保留为 int 10。
例子:
x = tonumber("10")
如果您打印 x 变量,它将输出一个 int 10 而不是 "10"
和 Python 进程一样
x = int("10")
谢谢。
从 lua 5.3 开始,有一个math.tointeger
字符串到整数的新函数。仅用于整数,没有浮点数。
例如:
print(math.tointeger("10.1")) -- nil
print(math.tointeger("10")) -- 10
如果要转换整数和浮点数,该tonumber
函数更合适。
您可以使用该tonumber
功能,就像您如何使用该tostring
功能一样,以下是如何使用它:
local x = tonumber("45")
print(x)
结果应该是45
。
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
Lua 数字类型是双精度类型,在luaconf 中实现。h detail 一般有两种选择:
tonumber()
andtostring()
方法,可以实现数字和字符串的转换。math.tointeger()
也可以用这种方法转换成数字。不过根据你的实际场景,如果只是为了计算,Lua可以根据这个操作符号进行转换。例如
s = "1" + 2; -- lua will convert "1" to 1
print(s)
s1 = "e" + 3; -- error
print(s1)
更多关于lua,可以看lua官方文档
希望对您有用,期待您的回复,期待与您的进一步沟通!
这是你应该放的
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20