Bagaimana saya bisa mengkonversi string ke integer di Lua?
Saya memiliki string seperti ini:
a = "10"
Saya ingin dikonversi menjadi 10, jumlahnya.
Bagaimana saya bisa mengkonversi string ke integer di Lua?
Saya memiliki string seperti ini:
a = "10"
Saya ingin dikonversi menjadi 10, jumlahnya.
Jawaban:
Gunakan tonumber
fungsinya . Seperti dalam a = tonumber("10")
.
Anda dapat memaksa konversi implisit dengan menggunakan string dalam operasi aritmatika seperti pada a= "10" + 0
, tetapi ini tidak cukup jelas atau sebersih menggunakan tonumber
secara eksplisit.
tonumber
!)
+
selalu ditambahkan secara eksplisit, ..
- Rangkaian.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Keluaran
string
number
Semua angka dalam Lua adalah float ( edit: Lua 5.2 atau kurang). Jika Anda benar-benar ingin mengonversi menjadi "int" (atau setidaknya meniru perilaku ini), Anda dapat melakukan ini:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
Dalam hal ini Anda secara eksplisit mengubah string (atau benar-benar, apa pun itu) menjadi angka, dan kemudian memotong angka seperti gips (int) akan dilakukan di Jawa.
Sunting: Ini masih bekerja di Lua 5.3, bahkan berpikir Lua 5.3 memiliki bilangan bulat nyata, seperti math.floor()
mengembalikan bilangan bulat, sedangkan operator seperti number // 1
itu masih akan mengembalikan float jika number
float.
katakanlah string yang ingin Anda ubah menjadi angka ada dalam variabel S
a=tonumber(S)
asalkan ada angka dan hanya angka di S
dalamnya akan mengembalikan angka, tetapi jika ada karakter yang bukan angka (kecuali periode untuk mengapung) itu akan mengembalikan nihil
Opsi yang lebih jelas adalah menggunakan tonumber .
Pada 5.3.2, fungsi ini akan secara otomatis mendeteksi (menandatangani) integer, float (jika ada titik) dan heksadesimal (baik integer dan float, jika string dimulai dengan "0x" atau "0X").
Cuplikan berikut ini lebih pendek tetapi tidak setara:
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.
Perlu dicatat bahwa math.floor()
selalu dibulatkan ke bawah, dan karena itu tidak menghasilkan hasil yang masuk akal untuk nilai-nilai floating point negatif.
Sebagai contoh, -10.4 direpresentasikan sebagai integer biasanya akan terpotong atau dibulatkan ke -10. Namun hasil dari math.floor () tidak sama:
math.floor(-10.4) => -11
Untuk pemotongan dengan konversi tipe, fungsi pembantu berikut ini akan berfungsi:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Referensi: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
Anda dapat membuat accessor untuk menyimpan "10" sebagai int 10 di dalamnya.
Contoh:
x = tonumber("10")
jika Anda mencetak variabel x, itu akan menghasilkan int 10 dan bukan "10"
sama seperti proses Python
x = int ("10")
Terima kasih.
Saya akan merekomendasikan untuk memeriksa Hyperpolyglot, memiliki perbandingan yang luar biasa: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Sebenarnya Lua dikonversi menjadi dobel bukan menjadi int.
Jenis angka mewakili angka nyata (titik presisi mengambang-ganda).
tonumber
mengambil dua argumen, pertama adalah string yang dikonversi ke angka dan yang kedua adalah basis dari e
.
Nilai pengembalian tonumber
ada di basis 10.
Jika tidak base
disediakan itu mengkonversi nomor ke basis 10.
> a = '101'
> tonumber(a)
101
Jika basis disediakan, ia mengubahnya ke basis yang diberikan.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Jika e
berisi karakter yang tidak valid maka kembali 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
Saya menjawab mengingat 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
inilah yang harus Anda masukkan
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20