2012-03-11 265 views
26

儘管Lua沒有區分浮點數和整數,但在某些情況下,當您要使用整數時。如果你不能做類似C的演員或者沒有像Python的int這樣的東西,那麼將數字轉換爲整數的最好方法是什麼?Lua:從float轉換爲int

例如計算

IDX =位置陣列的索引時/寬度

你如何能夠確保idx是一個有效的數組索引?我想出了一個使用string.find的解決方案,但也許有一種使用算術的方法顯然會快得多。我的解決辦法:

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 

回答

41

你可以使用math.floor(x)

Lua Reference Manual

返回的最大整數小於或等於x。

+3

你可以擴展這個答案,通過投擲一些條來處理負數:'math.floor(math.abs(x))' – Ziggy 2015-10-21 05:00:09

2

爲什麼不只是使用math.floor()?只要分子和分母是非負數和有效範圍,它就會使指數有效。

3

@Hofstad與math.floor(Number x)建議消除小數點右側的提示是正確的,您可能需要舍入。沒有數學,但它如同math.floor(x + 0.5)一樣簡單。你想回合的原因是因爲花車通常是近似的。例如,1可以是0.999999996

12.4 + 0.5 = 12.9,地板12

12.5 + 0.5 = 13,地板13

12.6 + 0.5 = 13.1,地板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引入了一個新的操作符,稱爲floor division,表示爲//

例如吹

的Lua 5.3.1版權(C)1994年至2015年Lua.org,PUC-力

> 12 // 5

的詳細信息可能被發現在lua reference