2012-03-11 43 views
26

Mặc dù Lua không phân biệt giữa số dấu phẩy động và số nguyên, có một số trường hợp khi bạn muốn sử dụng số nguyên. Cách tốt nhất để bí mật một số thành một số nguyên là gì nếu bạn không thể làm một diễn viên giống như C hoặc không có cái gì đó giống như của Python int?Lua: chuyển đổi từ phao sang int

Ví dụ khi tính toán một chỉ số cho một mảng trong

idx = vị trí/chiều rộng

làm thế nào bạn có thể đảm bảo idx là một chỉ số mảng hợp lệ? Tôi đã đưa ra một giải pháp sử dụng string.find, nhưng có thể có một phương pháp sử dụng số học rõ ràng sẽ nhanh hơn nhiều. Giải pháp của tôi:

function toint(n) 
    local s = tostring(n) 
    local i, j = s:find('%.') 
    if i then 
     return tonumber(s:sub(1, i-1)) 
    else 
     return n 
    end 
end 

Trả lời

41

Bạn có thể sử dụng math.floor(x)

Từ Lua Reference Manual:

Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng x.

+3

Bạn có thể mở rộng câu trả lời này để xử lý các số âm bằng cách ném vào một số thanh: 'math.floor (math.abs (x))' – Ziggy

2

tại sao không chỉ sử dụng math.floor()? nó sẽ làm cho các chỉ số hợp lệ miễn là tử số và mẫu số không âm và trong các phạm vi hợp lệ.

3

@Hofstad đúng với đề xuất math.floor(Number x) để loại bỏ các bit bên phải của số thập phân, bạn có thể muốn làm tròn thay thế. Không có math.round, nhưng nó đơn giản như math.floor(x + 0.5). Lý do bạn muốn làm tròn là vì phao thường là gần đúng. Ví dụ, 1 có thể là 0,999999996

12,4 + 0,5 = 12,9, rối trí 12

12,5 + 0,5 = 13, rối trí 13

12,6 + 0,5 = 13,1, rối trí 13

local round = function(a, prec) 
    return math.floor(a + 0.5*prec) -- where prec is 10^n, starting at 0 
end 
2

Lua 5.3 giới thiệu toán tử mới, được gọi là phân chia tầng và được biểu thị bằng //

dụ thổi

Lua 5.3.1 Bản quyền (C) 1994-2015 Lua.org, PUC-Rio

> 12 // 5

biết thêm có thể được tìm thấy trong lua reference

Các vấn đề liên quan