Hoe kan ik een string converteren naar een geheel getal in Lua?
Ik heb een string als deze:
a = "10"
Ik wil graag dat het wordt omgezet naar 10, het getal.
Antwoord 1, autoriteit 100%
Gebruik de functie tonumber
. Zoals in a = tonumber("10")
.
Antwoord 2, autoriteit 11%
Je kunt een impliciete conversie forceren door een string te gebruiken in rekenkundige bewerkingen zoals in a= "10" + 0
, maar dit is niet zo duidelijk of zo schoon als het gebruik van tonumber
expliciet.
Antwoord 3, autoriteit 3%
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Uitvoer
string
number
Antwoord 4, autoriteit 3%
Alle getallen in Lua zijn drijvers (edit:Lua 5.2 of minder). Als u echt wilt converteren naar een “int” (of op zijn minst dit gedrag wilt repliceren), kunt u dit doen:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
In dat geval converteert u de tekenreeks (of eigenlijk, wat het ook is) expliciet naar een getal en kapt u het nummer af zoals een (int) cast zou doen in Java.
Bewerken:dit werkt nog steeds in Lua 5.3, zelfs als Lua 5.3 echte gehele getallen heeft, aangezien math.floor()
een geheel getal retourneert, terwijl een operator zoals number // 1
zal nog steeds een float retourneren als number
een float is.
Antwoord 5, autoriteit 2%
zeg dat de tekenreeks die je in een getal wilt veranderen in de variabele S
staat
a=tonumber(S)
op voorwaarde dat er getallen zijn en alleen getallen in S
zal het een getal opleveren,
maar als er tekens zijn die geen cijfers zijn (behalve punten voor floats)
het zal nul opleveren
Antwoord 6
De duidelijkere optie is om naarnummerte gebruiken.
Vanaf 5.3.2 detecteert deze functie automatisch gehele getallen (met teken), float (als een punt aanwezig is) en hexadecimaal (zowel gehele getallen als floats, als de string begint met “0x” of “0X”).
De volgende fragmenten zijn korter maar niet equivalent:
-
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.
Antwoord 7
Opgemerkt moet worden dat math.floor()
altijd naar beneden afrondt en daarom geen zinnig resultaat oplevert voor negatieve drijvende-kommawaarden.
Bijvoorbeeld, -10,4 weergegeven als een geheel getal wordt meestal afgekapt of afgerond op -10. Toch is het resultaat van math.floor() niet hetzelfde:
math.floor(-10.4) => -11
Voor truncatie met typeconversie werkt de volgende hulpfunctie:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Referentie: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
Antwoord 8
tonumber
heeft twee argumenten, de eerste is een tekenreeks die wordt geconverteerd naar een getal en de tweede is de basis van e
.
Retourwaarde tonumber
is in grondtal 10.
Als er geen base
is opgegeven, wordt het getal geconverteerd naar grondtal 10.
> a = '101'
> tonumber(a)
101
Als grondtal is opgegeven, wordt dit geconverteerd naar het opgegeven grondtal.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Als e
een ongeldig teken bevat, wordt nil
geretourneerd.
> --[[ 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
Ik heb geantwoord gezien Lua5.3
Antwoord 9
Je kunt een accessor maken om de “10” als int 10 erin te houden.
Voorbeeld:
x = tonumber("10")
als u de variabele x afdrukt, wordt een int 10 uitgevoerd en niet “10”
hetzelfde als Python-proces
x = int(“10”)
Bedankt.
Antwoord 10
Ik zou aanraden om Hyperpolyglot te controleren, heeft een geweldige vergelijking: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Eigenlijk zet Lua om in dubbels, niet in ints.
Het getaltype staat voor reëel (drijvende komma met dubbele precisie)
nummers.
http://www.lua.org/pil/2.3.html
Antwoord 11
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
Antwoord 12
Sinds lua 5.3 is er een nieuwe math.tointeger
functie voor string naar integer. Alleen voor integer, geen float.
Bijvoorbeeld:
print(math.tointeger("10.1")) -- nil
print(math.tointeger("10")) -- 10
Als je integer en float wilt converteren, is de functie tonumber
geschikter.
Antwoord 13
dit is wat je moet plaatsen
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20