2012-03-11 113 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

あなたはLua Reference Manualからmath.floor(x)

を使用することができます。

xより小さいか等しい最大の整数を返します

+3

いくつかのバーを投げて負の数値を扱うこの答えを拡張することができます: 'math.floor(math.abs(x))' – Ziggy

2

なぜmath.floor()を使用しないのですか?分子と分母が負ではなく有効な範囲内にある限り、指標は有効になります。

3

@Hofstadは小数点の右側のビットを削除するための提案であるmath.floor(Number x)で正しいですが、代わりに丸めたいかもしれません。数学はありませんが、それはmath.floor(x + 0.5)のように簡単です。あなたが丸めたい理由は、浮きは通常おおよそのものです。例えば、図1は、0.999999996

12.4 + 0.5 = 12.9、+ 0.5 = 13 12

12.5床の、13.1 = 13

12.6 + 0.5床の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

関連する問題