Come posso convertire una stringa in un numero intero in Lua?
Ho una stringa come questa:
a = "10"
Vorrei che fosse convertito in 10, il numero.
Come posso convertire una stringa in un numero intero in Lua?
Ho una stringa come questa:
a = "10"
Vorrei che fosse convertito in 10, il numero.
Risposte:
Utilizzare la tonumber
funzione di . Come in a = tonumber("10")
.
Puoi forzare una conversione implicita usando una stringa in operazioni aritmetiche come in a= "10" + 0
, ma questo non è così chiaro o pulito come usare tonumber
esplicitamente.
tonumber
!)
+
è sempre esplicitamente aggiunta, ..
- concatenazione.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Produzione
string
number
Tutti i numeri in Lua sono float ( modifica: Lua 5.2 o meno). Se vuoi veramente convertirti in un "int" (o almeno replicare questo comportamento), puoi farlo:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Nel qual caso converti esplicitamente la stringa (o davvero, qualunque essa sia) in un numero, quindi tronca il numero come farebbe un cast (int) in Java.
Modifica: Funziona ancora in Lua 5.3, anche se Lua 5.3 ha numeri interi reali, poiché math.floor()
restituisce un numero intero, mentre un operatore come number // 1
restituirà comunque un float se number
è float.
supponiamo che la stringa che vuoi trasformare in un numero sia nella variabile S
a=tonumber(S)
purché ci siano numeri e solo i numeri in S
esso restituiranno un numero, ma se ci sono caratteri che non sono numeri (tranne i periodi per i float) restituirà zero
L'opzione più chiara è utilizzare il numero .
A partire dalla 5.3.2, questa funzione rileverà automaticamente interi (con segno), float (se è presente un punto) ed esadecimali (sia interi che float, se la stringa inizia con "0x" o "0X").
I seguenti frammenti sono più brevi ma non equivalenti:
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.
Va notato che math.floor()
arrotonda sempre per difetto e quindi non produce un risultato ragionevole per valori a virgola mobile negativi.
Ad esempio, -10.4 rappresentato come un numero intero viene normalmente troncato o arrotondato a -10. Tuttavia il risultato di math.floor () non è lo stesso:
math.floor(-10.4) => -11
Per il troncamento con conversione del tipo, la seguente funzione di supporto funzionerà:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Riferimento: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
È possibile creare un accessor per mantenere "10" come int 10 in esso.
Esempio:
x = tonumber("10")
se si stampa la variabile x, verrà generato un int 10 e non "10"
lo stesso del processo Python
x = int ("10")
Grazie.
Consiglierei di controllare Hyperpolyglot, ha un confronto fantastico: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. In realtà Lua si converte in doppio, non in in.
Il tipo di numero rappresenta numeri reali (a virgola mobile a precisione doppia).
tonumber
accetta due argomenti, il primo è la stringa che viene convertita in numero e il secondo è la base di e
.
Il valore di ritorno tonumber
è in base 10.
Se non base
viene fornito, converte il numero in base 10.
> a = '101'
> tonumber(a)
101
Se viene fornita la base, la converte nella base indicata.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Se e
contiene caratteri non validi, viene restituito 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
Ho risposto 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
ecco cosa dovresti mettere
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20