Luaの計算(四則演算と数値の扱い)

目次

四則演算

local a = 10
local b = 3

print(a + b)  -- 13
print(a - b)  -- 7
print(a * b)  -- 30
print(a / b)  -- 3.3333333333333

+ - * /は、基本的な演算子です。

代入演算子(+=等)やインクリメント(++)やデクリメント(--)は存在しません。

 

浮動小数点(float)

print(6 / 3)  -- 2.0(整数ではなくfloat)

/は、常に浮動小数点(float)を返します。

整数除算(//)

//演算子は、Lua5.3以降の機能です。

local a = 10
local b = 3

print(a // b)  -- 3
print(5 // 3)   -- 1
print(-5 // 3)  -- -2(負数に注意)

//は整数除算(floor division)です。
小数点以下を切り捨てます。

//は正確にはfloor(床関数)です。
-5/3=-1.666...を切り捨てると-1になりそうですが、floorは負の無限大方向への丸めなので-2になります。

余り(%)

local a = 10
local b = 3

print(a % b)  -- 1

%は剰余(余り)を求めます。

 

偶数判定などでよく使います。

local n = 4

if n % 2 == 0 then
    print("偶数") -- 偶数
end

べき乗(^)

print(2 ^ 4)  -- 16.0

べき乗(^)の結果は常にfloatになります。

浮動小数点の誤差

print(0.1 + 0.2) -- 0.3ではなく 0.3 と表示されるが内部は誤差あり
print(0.1 + 0.2 == 0.3) -- falseと出力される

小数同士の計算では浮動小数点の誤差が発生します。

これは多くの言語(C/JavaScript/Pythonなど)と同じです。

型の確認(type)

local a = 10
print(type(a))  -- number

type()は関数です。

文字列を返します。

整数/浮動小数点の判定

math.typeは、Lua5.3以降の機能です。

local x = 10
if math.type(x) == "integer" then
    print("integer") -- integer
end

local y = 3.333
if math.type(y) == "float" then
    print("float") -- float
end

math.typeで、整数かどうかを判定できます。
integer(整数)/float(浮動小数点)を区別できます。

文字列→数値変換(tonumber)

local str = "123"
local num = tonumber(str)

print(num + 1)  -- 124

tonumberは、string型をnumber型で返します。

変換できない場合はnilを返します。

 

tonumberの第2引数

tonumberは第2引数で基数(進数)を指定できます。

以下は16進数文字列の変換の例です。

print(tonumber("ff", 16)) -- 255

関連の記事

Lua if文のサンプル

△上に戻る