Wie kann ich in Lua eine Zeichenfolge in eine Ganzzahl konvertieren?
Ich habe eine Zeichenfolge wie diese:
a = "10"
Ich möchte, dass es in 10, die Zahl, umgewandelt wird.
Wie kann ich in Lua eine Zeichenfolge in eine Ganzzahl konvertieren?
Ich habe eine Zeichenfolge wie diese:
a = "10"
Ich möchte, dass es in 10, die Zahl, umgewandelt wird.
Antworten:
Verwenden Sie die tonumber
Funktion . Wie in a = tonumber("10")
.
Sie können eine implizite Konvertierung erzwingen, indem Sie eine Zeichenfolge in einer arithmetischen Operation wie in verwenden a= "10" + 0
. Dies ist jedoch nicht ganz so klar oder sauber wie die tonumber
explizite Verwendung .
tonumber
stattdessen zu verwenden !)
+
ist immer explizit Addition, ..
- Verkettung.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Ausgabe
string
number
Alle Zahlen in Lua sind Floats ( bearbeiten: Lua 5.2 oder weniger). Wenn Sie wirklich in ein "int" konvertieren möchten (oder dieses Verhalten zumindest replizieren möchten), können Sie dies tun:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
In diesem Fall konvertieren Sie die Zeichenfolge (oder wirklich was auch immer) explizit in eine Zahl und kürzen die Zahl dann wie eine (int) Umwandlung in Java.
Bearbeiten: Dies funktioniert immer noch in Lua 5.3, obwohl Lua 5.3 echte Ganzzahlen hat, da es math.floor()
eine Ganzzahl zurückgibt, während ein Operator wie z. B. number // 1
immer noch einen Float zurückgibt, wenn number
es sich um einen Float handelt.
Angenommen, die Zeichenfolge, die Sie in eine Zahl umwandeln möchten, befindet sich in der Variablen S
a=tonumber(S)
vorausgesetzt, es gibt Zahlen und nur Zahlen S
geben eine Zahl zurück, aber wenn es Zeichen gibt, die keine Zahlen sind (außer Punkte für Gleitkommazahlen), wird Null zurückgegeben
Die klarere Option ist die Verwendung von Tonumber .
Ab 5.3.2 erkennt diese Funktion automatisch (vorzeichenbehaftete) Ganzzahlen, float (wenn ein Punkt vorhanden ist) und hexadezimal (sowohl Ganzzahlen als auch float, wenn die Zeichenfolge mit "0x" oder "0X" beginnt).
Die folgenden Schnipsel sind kürzer, aber nicht gleichwertig:
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.
Es ist zu beachten, dass dies math.floor()
immer abrundet und daher für negative Gleitkommawerte kein vernünftiges Ergebnis liefert.
Beispielsweise wird -10,4, das als Ganzzahl dargestellt wird, normalerweise entweder abgeschnitten oder auf -10 gerundet. Das Ergebnis von math.floor () ist jedoch nicht dasselbe:
math.floor(-10.4) => -11
Für das Abschneiden mit Typkonvertierung funktioniert die folgende Hilfsfunktion:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Referenz: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
Sie können einen Accessor erstellen, um die "10" als int 10 darin zu belassen.
Beispiel:
x = tonumber("10")
Wenn Sie die x-Variable drucken, wird eine int 10 und nicht "10" ausgegeben.
das gleiche wie der Python-Prozess
x = int ("10")
Vielen Dank.
Ich würde empfehlen, Hyperpolyglot zu überprüfen, hat einen tollen Vergleich: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Eigentlich wandelt sich Lua in Doppel um, nicht in Ints.
Der Zahlentyp repräsentiert reelle Zahlen (Gleitkommazahlen mit doppelter Genauigkeit).
tonumber
nimmt zwei Argumente an, das erste ist eine Zeichenfolge, die in eine Zahl umgewandelt wird, und das zweite ist die Basis von e
.
Der Rückgabewert tonumber
befindet sich in Basis 10.
Wenn nein angegeben base
ist, wird die Zahl in Basis 10 konvertiert.
> a = '101'
> tonumber(a)
101
Wenn eine Basis bereitgestellt wird, wird diese in die angegebene Basis konvertiert.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Wenn es ein e
ungültiges Zeichen enthält, wird es zurückgegeben 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
Ich antwortete unter Berücksichtigung von 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
Hier ist, was Sie setzen sollten
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20