Lua string ke int


183

Bagaimana saya bisa mengkonversi string ke integer di Lua?

Saya memiliki string seperti ini:

a = "10"

Saya ingin dikonversi menjadi 10, jumlahnya.


6
Tautan yang tepat adalah bagian tentang pemaksaan: 5.1 , 5.2 .
lhf

5
@NicolBolas: +1 untuk mengajukan pertanyaan yang merupakan hasil Google pertama dan memberikan jawaban langsung.
sebelum

2
+1 untuk mengkompensasi troll yang menggigit ini Nicol: D
Петър Петров

Lua hanya melakukan konversi secara otomatis antara string dan angka. Jika Anda ingin memastikan jenisnya, gunakan a = tonumber (a).
xpol

Jawaban:



33

Anda dapat memaksa konversi implisit dengan menggunakan string dalam operasi aritmatika seperti pada a= "10" + 0, tetapi ini tidak cukup jelas atau sebersih menggunakan tonumbersecara eksplisit.


2
Tidak, itu akan mengubah "10" menjadi bilangan bulat dan kemudian menambahkan 0 ke dalamnya. (Namun, kurangnya kejelasan lebih merupakan alasan untuk menggunakannya tonumber!)
Rena

16
@Rena, tidak ada kekurangan dalam kejelasan. +selalu ditambahkan secara eksplisit, ..- Rangkaian.
Oleg V. Volkov

1
@ lhf: pemaksaan otomatis hanya akan berfungsi pada angka. Dan operator pembanding (== ~ = <> <=> =) tidak mengonversi argumen mereka. Dan untuk alasan kinerja Anda harus menghindari terlalu mengandalkan paksaan otomatis
wsha

9
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

Keluaran

   string                                                                                                                                                                          
   number

8

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 // 1itu masih akan mengembalikan float jika numberfloat.


5

katakanlah string yang ingin Anda ubah menjadi angka ada dalam variabel S

a=tonumber(S)

asalkan ada angka dan hanya angka di Sdalamnya akan mengembalikan angka, tetapi jika ada karakter yang bukan angka (kecuali periode untuk mengapung) itu akan mengembalikan nihil


4

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.

3

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


2

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.



1

tonumber (e [, base])

tonumbermengambil dua argumen, pertama adalah string yang dikonversi ke angka dan yang kedua adalah basis dari e.

Nilai pengembalian tonumberada di basis 10.

Jika tidak basedisediakan 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 eberisi 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


0
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

-1

inilah yang harus Anda masukkan

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20

a = tonumber (stringnumber) sudah
mencukupi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.