Bir dizeyi Lua'da tamsayıya nasıl dönüştürebilirim?
Ben böyle bir dize var:
a = "10"
Sayı 10'a dönüştürülmesini istiyorum.
Bir dizeyi Lua'da tamsayıya nasıl dönüştürebilirim?
Ben böyle bir dize var:
a = "10"
Sayı 10'a dönüştürülmesini istiyorum.
Yanıtlar:
tonumber
İşlevi kullanın . Olduğu gibi a = tonumber("10")
.
Bir aritmetik işlemlerde olduğu gibi bir dize kullanarak örtük bir dönüşümü zorlayabilirsiniz a= "10" + 0
, ancak bu tonumber
açıkça kullanmak kadar açık veya temiz değildir .
tonumber
bunun yerine kullanmak için daha fazla nedendir !)
+
her zaman açıkça ekleme, ..
- birleştirme.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Çıktı
string
number
Lua'daki tüm sayılar yüzer ( değiştir: Lua 5.2 veya daha az). Gerçekten bir "int" değerine dönüştürmek (veya en azından bu davranışı çoğaltmak) istiyorsanız, bunu yapabilirsiniz:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Bu durumda, dizeyi (veya gerçekte ne olursa olsun) açıkça bir sayıya dönüştürür ve ardından sayıyı Java'da bir (int) kadro gibi kesersiniz.
Düzenleme: Bu hala Lua 5.3 çalışır, hatta Lua 5.3 math.floor()
bir tamsayı döndürür gibi gerçek tamsayıları var iken, böyle bir operatör number // 1
hala bir şamandıra ise bir şamandıra dönecektir number
.
sayıya dönüştürmek istediğiniz dizenin değişkente olduğunu varsayalım S
a=tonumber(S)
ancak içinde sayılar varsa ve yalnızca sayılar S
bir sayı döndürür, ancak sayı olmayan herhangi bir karakter varsa (şamandıralar için süreler hariç) sıfır döndürür
Daha net seçenek ton sayısını kullanmaktır .
5.3.2'den itibaren, bu işlev otomatik olarak tamsayıları (işaretli), kayan nokta (bir nokta varsa) ve onaltılı (dize "0x" veya "0X" ile başlıyorsa hem tamsayılar hem de kayan noktalar) algılar.
Aşağıdaki snippet'ler daha kısadır ancak eşdeğer değildir:
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.
Her math.floor()
zaman aşağı yuvarlandığına ve bu nedenle negatif kayan nokta değerleri için mantıklı bir sonuç vermediğine dikkat edilmelidir .
Örneğin, bir tamsayı olarak temsil edilen -10.4 genellikle kesilir veya -10'a yuvarlanır. Ancak math.floor () sonucu aynı değildir:
math.floor(-10.4) => -11
Tür dönüşümü ile kesme için aşağıdaki yardımcı işlev çalışacaktır:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Referans: http://lua.2524044.n2.nabble.com/5-3- Dönüştürme-a- yüzer-point-number-to-integer-td7664081.html
"10" u int 10 olarak tutmak için bir erişimci yapabilirsiniz.
Misal:
x = tonumber("10")
x değişkenini yazdırırsanız, "10" değil, int 10 verir
Python süreci ile aynı
x = int ("10")
Teşekkürler.
Ben Hyperpolyglot kontrol tavsiye ederim, harika bir karşılaştırma var: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Aslında Lua, iki katına dönüşmez.
Sayı türü gerçek (çift kesinlikli kayar nokta) sayıları temsil eder.
tonumber
iki argüman alır, ilki sayıya dönüştürülen dize, ikincisi ise taban e
.
Dönüş değeri tonumber
10 tabanındadır.
Hayır base
sağlanmışsa, sayıyı 10 tabanına dönüştürür.
> a = '101'
> tonumber(a)
101
Baz sağlanırsa, verilen tabana dönüştürür.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Eğer e
o zaman geçersiz bir karakter içeriyor döndürür 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
Lua5.3 dikkate alınarak cevapladım
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
işte koymalısın
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20