Làm cách nào tôi có thể chuyển đổi một chuỗi thành một số nguyên trong Lua?
Tôi có một chuỗi như thế này:
a = "10"
Tôi muốn nó được chuyển đổi thành 10, số.
Làm cách nào tôi có thể chuyển đổi một chuỗi thành một số nguyên trong Lua?
Tôi có một chuỗi như thế này:
a = "10"
Tôi muốn nó được chuyển đổi thành 10, số.
Câu trả lời:
Sử dụng tonumber
chức năng . Như trong a = tonumber("10")
.
Bạn có thể buộc chuyển đổi ngầm bằng cách sử dụng một chuỗi trong các phép toán số học như trong a= "10" + 0
, nhưng điều này không hoàn toàn rõ ràng hoặc rõ ràng như sử dụng tonumber
rõ ràng.
tonumber
!)
+
luôn luôn là bổ sung rõ ràng, ..
- nối.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Đầu ra
string
number
Tất cả các số trong Lua là số float ( chỉnh sửa: Lua 5.2 trở xuống). Nếu bạn thực sự muốn chuyển đổi thành "int" (hoặc ít nhất là sao chép hành vi này), bạn có thể thực hiện việc 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 đó, bạn chuyển đổi rõ ràng chuỗi (hoặc thực sự, bất kể đó là gì) thành một số và sau đó cắt bớt số như một (int) cast sẽ làm trong Java.
Chỉnh sửa: Điều 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, khi math.floor()
trả về một số nguyên, trong khi đó một toán tử như number // 1
vẫn sẽ trả về một float nếu number
là float.
nói rằng chuỗi bạn muốn biến thành một số nằm trong biến S
a=tonumber(S)
với điều kiện là có số và chỉ có số trong S
đó sẽ trả về một số, nhưng nếu có bất kỳ ký tự nào không phải là số (trừ dấu chấm cho số float) thì nó sẽ trả về nil
Tùy chọn rõ ràng hơn là sử dụng tonumber .
Kể từ 5.3.2, chức năng này sẽ tự động phát hiện các số nguyên (đã ký), float (nếu có một điểm) và thập lục phân (cả số nguyên và số float, nếu chuỗi bắt đầu bằng "0x" hoặc "0X").
Các đoạn sau đây 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.tointeger`, it errors if it fails.
Cần lưu ý rằng math.floor()
luôn luôn làm tròn xuống, và do đó không mang lại kết quả hợp lý cho các giá trị dấu phẩy động âm.
Ví dụ: -10.4 được biểu thị dưới dạng một số nguyên thường sẽ bị cắt ngắn hoặc làm tròn thành -10. Tuy nhiên, kết quả của math.floor () không giống nhau:
math.floor(-10.4) => -11
Để cắt bớt với chuyển đổi loại, chức năng trợ giúp sau sẽ hoạt động:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Tham khảo: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
Bạn có thể tạo một phụ kiện để giữ "10" là int 10 trong đó.
Thí dụ:
x = tonumber("10")
nếu bạn in biến x, nó sẽ xuất ra int 10 chứ không phải "10"
giống như quy trình Python
x = int ("10")
Cảm ơn.
Tôi muốn giới thiệu để kiểm tra Hyperpolyglot, có một so sánh tuyệt vời: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Thật ra Lua chuyển đổi thành đôi không thành ints.
Loại số đại diện cho số thực (dấu phẩy động chính xác kép).
tonumber
nhận hai đối số, đầu tiên là chuỗi được chuyển đổi thành số và thứ hai là cơ sở của e
.
Giá trị trả về tonumber
là trong cơ sở 10.
Nếu không base
được cung cấp, nó chuyển đổi số thành cơ sở 10.
> a = '101'
> tonumber(a)
101
Nếu cơ sở được cung cấp, nó chuyển đổi nó thành cơ sở nhất định.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
Nếu e
chứa ký tự không hợp lệ thì nó trả về 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
Tôi đã trả lời xem xét 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