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 tonumberfunzione 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 tonumberesplicitamente.
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 // 1restituirà 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 Sesso 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).
tonumberaccetta 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 baseviene 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 econtiene 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