Luaで文字列を整数に変換するにはどうすればいいですか?ありがとうございました。
私はこのような文字列を持っています:
a = "10"
10という数字に変換したいのですが。
tonumber
関数 を使用してください。 a = tonumber("10")
と同じです。
a= "10" + 0
のように算術演算で文字列を使用することで暗黙の変換を強制することができますが、これはtonumber
を明示的に使用するほど明確ではないか、またはクリーンではありません。
Luaの数値はすべて浮動小数点数です(edit:Lua 5.2以下)。本当に "int"に変換したい(または少なくともこの振る舞いを再現したい)場合は、次のようにします。
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
その場合は、文字列(または実際にはそれがなんであれ)を明示的に数値に変換してから、(int)キャストがJavaで行うように数値を切り捨てます。
編集:math.floor()
は整数を返しますが、number // 1
のような演算子はまだ返すので、Lua 5.3は実数の整数を持っていてもLua 5.3でも動作します。 number
がfloatの場合はfloat.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
出力
string
number
数値に変換したい文字列が変数S
にあるとします。
a=tonumber(S)
S
には数字があり、数字しかない場合は数字を返しますが、数字以外の文字がある場合(浮動小数点のピリオドを除く)はnilを返します。
より明確なオプションはtonumberを使うことです。
5.3.2以降、この関数は自動的に(符号付き)整数、float(ポイントがある場合)そして16進数(文字列が "0x"または "0X"で始まる場合は整数と浮動小数点の両方)を検出します。
次のスニペットは短くなっていますが、同等ではありません。
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.
私はHyperpolyglotをチェックすることをお勧めします、素晴らしい比較をしています: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps。実際Luaはintではなくdoubleに変換します。
数値型は実数(倍精度浮動小数点)数を表します。
あなたはその中にint 10として "10"を保持するためにアクセサを作ることができます。
例:
x = tonumber("10")
x変数を印刷すると、10ではなくint 10が出力されます。
pythonプロセスと同じ
x = int( "10")
ありがとう。
math.floor()
は常に切り捨ててしまうため、負の浮動小数点値に対して適切な結果が得られるわけではありません。
たとえば、整数として表される-10.4は通常切り捨てられるか、または-10に丸められます。それでもmath.floor()の結果は同じではありません。
math.floor(-10.4) => -11
型変換による切り捨てでは、次のヘルパー関数が機能します。
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
tonumber
は2つの引数を取ります。1つ目は数値に変換される文字列、2つ目はe
の基数です。
戻り値tonumber
は10進数です。
base
が指定されていない場合は、数値を基数10に変換します。
> a = '101'
> tonumber(a)
101
Baseが提供されている場合、指定されたbaseに変換します。
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
e
に無効な文字が含まれている場合、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
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