Lua-tekenreeks naar int

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 tonumberexpliciet.


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 // 1zal nog steeds een float retourneren als numbereen 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 Szal 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 (e [, base])

tonumberheeft twee argumenten, de eerste is een tekenreeks die wordt geconverteerd naar een getal en de tweede is de basis van e.

Retourwaarde tonumberis in grondtal 10.

Als er geen baseis 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 eeen ongeldig teken bevat, wordt nilgeretourneerd.

> --[[ 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.tointegerfunctie 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 tonumbergeschikter.


Antwoord 13

dit is wat je moet plaatsen

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20

Other episodes