Lua转换为int


182

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

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

a = "10"

我希望将其转换为10。


6
精确的链接是在强迫的部分:5.15.2
lhf 2012年

5
@NicolBolas:+1提出一个问题,这是第一个Google结果,并提供了直接的答案。
ereOn 2014年

2
d:+1来弥补这刺骨的巨魔尼科尔
ПетърПетров

Lua只是自动在字符串和数字之间进行转换。如果要确保类型,请使用= tonumber(a)。
xpol

Answers:



33

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


2
不,它将“ 10”转换为整数,然后将其加0。(不过,缺乏明确性是使用它的更多原因tonumber!)
Rena 2015年

16
@Rena,不言而喻。+始终是显式加法..-串联。
Oleg V. Volkov,

1
@lhf:自动强制仅适用于数字。比较运算符(==〜= <> <=> =)不会转换其参数。并且出于性能原因,您应该避免过多地依赖自动强制
wsha

9
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

输出量

   string                                                                                                                                                                          
   number

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

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

编辑:这仍然在Lua 5.3中有效,即使以为Lua 5.3具有实数也可以math.floor()返回整数,而运算符如number // 1仍将返回浮点数(如果number是浮点数)。


5

说您要变成数字的字符串在变量中 S

a=tonumber(S)

假设有数字,并且其中只有数字S将返回数字,但是如果有任何非数字字符(浮点数除外),则将返回nil


4

更清晰的选择是使用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.

3

应当指出,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


2

您可以使访问器将“ 10”保留为int 10。

例:

x = tonumber("10")

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

像Python过程一样

x = int(“ 10”)

谢谢。



1

tonumber (e [, base])

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

返回值tonumber以10为底。

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

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

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

> 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


0
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

-1

这是你应该放的东西

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

output:

20

a = tonumber(stringnumber)就足够了
wsha 18'9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.