2012-06-09 38 views
130

Làm thế nào tôi có thể chuyển đổi một chuỗi thành một số nguyên trong Lua? Cảm ơn bạn.Lua chuỗi để int

Tôi có một chuỗi như thế này:

a = "10" 

Tôi muốn nó được chuyển đổi đến 10, số lượng.

+6

Các liên kết chính xác là phần định cưỡng chế : [5.1] (http://www.lua.org/manual/5.1/manual.html#2.2.1), [5.2] (htt p: //www.lua.org/manual/5.2/manual.html#3.4.2). – lhf

+5

@NicolBolas: +1 để đặt câu hỏi là kết quả đầu tiên của Google và cung cấp câu trả lời trực tiếp. – ereOn

+2

+1 để bù lại bẫy troll Nicol: D –

Trả lời

215

Sử dụng tonumber function. Như trong a = tonumber("10").

+4

Trong Lua 5.3, (64-bit mặc định) số nguyên được xử lý cho phù hợp (http://www.lua.org/manual/5.3/manual.html): "Một hằng số bằng dấu chấm phân số hoặc số mũ biểu thị một phao; bằng không nó biểu thị một số nguyên. " –

27

Bạn có thể bắt buộc chuyển đổi ngầm bằng cách sử dụng chuỗi trong phép toán số học như trong a= "10" + 0, nhưng điều này không rõ ràng hoặc rõ ràng như sử dụng tonumber một cách rõ ràng.

+0

Tôi mong đợi điều này mang lại "100", không phải '10'. Tuy nhiên, chưa thử nghiệm nó. – Kroltan

+2

Không, nó sẽ chuyển đổi "10" thành số nguyên và sau đó thêm 0 vào số nguyên đó. (Sự thiếu rõ ràng là tất cả các lý do nhiều hơn để sử dụng 'tonumber' thay vào đó, mặc dù!) – Rena

+10

@ Rena, không có thiếu trong rõ ràng. '+' luôn được thêm vào một cách rõ ràng, '..' - ghép nối. –

8

Tất cả các số trong Lua đều nổi (chỉnh sửa: Lua 5.2 trở xuống). Nếu bạn thực sự muốn chuyển đổi sang một int "" (hoặc ít nhất là tái tạo hành vi này), bạn có thể làm điều này:

local function ToInteger(number) 
    return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'")) 
end 

Trong trường hợp này bạn chuyển đổi một cách rõ ràng chuỗi (hoặc thực sự, bất cứ điều gì) vào một số, và sau đó cắt ngắn số giống như một (int) cast sẽ làm trong Java.

Edit: này vẫn hoạt động trong Lua 5.3, thậm chí còn nghĩ Lua 5.3 có số nguyên thực, như math.floor() trả về một số nguyên, trong khi một nhà điều hành như number // 1 vẫn sẽ trả về một phao nếu number là một phao.

3

nói chuỗi bạn muốn chuyển thành một số là trong biến S

a=tonumber(S) 

với điều kiện là có một số lượng và số chỉ trong S nó sẽ trở lại một con số, nhưng nếu có bất kỳ ký tự nào không phải là số (trừ các khoảng thời gian cho phao) , nó sẽ trả lại số nil

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

Output

string                                           
    number 
1

Bạn có thể thực hiện một accessor để giữ "10" như int 10 trong đó.

Ví dụ:

x = tonumber("10") 

nếu bạn in các biến x, nó sẽ ra một int 10 và không phải là "10"

tương tự như quá trình Python

x = int ("10")

Cảm ơn.

3

Tùy chọn rõ ràng hơn là sử dụng tonumber.

Tính đến 5.3.2, chức năng này sẽ tự động phát hiện (đã ký) số nguyên, float (nếu một điểm là hiện tại) và hệ thập lục phân (cả hai số nguyên và phao, nếu chuỗi bắt đầu bằng "0x" hoặc "0X").

Các đoạn sau ngắn hơn nhưng không tương đương:

  • 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.tonteger, it errors if it fails 
    
0

đây là những gì bạn nên đặt

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

output: 

20