Como posso converter uma string em um número inteiro em Lua?
Eu tenho uma string como esta:
a = "10"
Eu gostaria que fosse convertido para 10, o número.
Como posso converter uma string em um número inteiro em Lua?
Eu tenho uma string como esta:
a = "10"
Eu gostaria que fosse convertido para 10, o número.
Respostas:
Utilizar a tonumber
função . Como em a = tonumber("10")
.
Você pode forçar uma conversão implícita usando uma string em operações aritméticas como em a= "10" + 0
, mas isso não é tão claro ou limpo como o uso tonumber
explícito.
tonumber
em vez disso, embora!)
+
é sempre explicitamente adição ..
- concatenação.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Resultado
string
number
Todos os números em Lua são flutuantes ( editar: Lua 5.2 ou menos). Se você realmente deseja converter para um "int" (ou pelo menos replicar esse comportamento), pode fazer o seguinte:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Nesse caso, você converte explicitamente a string (ou realmente, seja o que for) em um número e, em seguida, trunca o número como uma conversão (int) faria em Java.
Edit: Isso ainda funciona no Lua 5.3, mesmo que o Lua 5.3 tenha números inteiros reais, pois math.floor()
retorna um número inteiro, enquanto um operador como esse number // 1
ainda retornará um float se number
for um float.
digamos que a string que você deseja transformar em número está na variável S
a=tonumber(S)
desde que existam números e apenas números S
retornem um número, mas se houver caracteres que não sejam números (exceto períodos para flutuações), retornará nulo
A opção mais clara é usar o número .
A partir da versão 5.3.2, essa função detectará automaticamente números inteiros (sinalizados), float (se houver um ponto) e hexadecimal (números inteiros e floats, se a sequência começar por "0x" ou "0X").
Os seguintes trechos são mais curtos, mas não equivalentes:
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.
Note-se que math.floor()
sempre arredonda para baixo e, portanto, não produz um resultado sensível para valores negativos de ponto flutuante.
Por exemplo, -10,4 representado como um número inteiro normalmente seria truncado ou arredondado para -10. No entanto, o resultado de math.floor () não é o mesmo:
math.floor(-10.4) => -11
Para truncamento com conversão de tipo, a seguinte função auxiliar funcionará:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Referência: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
Você pode criar um acessador para manter o "10" como int 10 nele.
Exemplo:
x = tonumber("10")
se você imprimir a variável x, ela produzirá um int 10 e não "10"
igual ao processo Python
x = int ("10")
Obrigado.
Eu recomendaria verificar o Hyperpolyglot, tem uma comparação incrível: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Na verdade, Lua se converte em dobras e não em ints.
O tipo de número representa números reais (ponto flutuante de precisão dupla).
tonumber
recebe dois argumentos, o primeiro é a string que é convertida em número e o segundo é a base de e
.
O valor de retorno tonumber
está na base 10.
Se não base
for fornecido, ele converte o número na base 10.
> a = '101'
> tonumber(a)
101
Se a base for fornecida, ela será convertida na base fornecida.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Se e
contiver caracteres inválidos, ele retornará 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
Eu respondi considerando Lua5.3
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
aqui está o que você deve colocar
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20