web-dev-qa-db-ja.com

intへのLua文字列

Luaで文字列を整数に変換するにはどうすればいいですか?ありがとうございました。

私はこのような文字列を持っています:

a = "10"

10という数字に変換したいのですが。

158
David Gomes

tonumber関数 を使用してください。 a = tonumber("10")と同じです。

262
Nicol Bolas

a= "10" + 0のように算術演算で文字列を使用することで暗黙の変換を強制することができますが、これはtonumberを明示的に使用するほど明確ではないか、またはクリーンではありません。

31
lhf

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.

8
Stormswept
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

出力

   string                                                                                                                                                                          
   number
7
user4700203

数値に変換したい文字列が変数Sにあるとします。

a=tonumber(S)

Sには数字があり、数字しかない場合は数字を返しますが、数字以外の文字がある場合(浮動小数点のピリオドを除く)はnilを返します。

5
CORE craftX

より明確なオプションは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.
    
4
4xel

私はHyperpolyglotをチェックすることをお勧めします、素晴らしい比較をしています: http://hyperpolyglot.org/

http://hyperpolyglot.org/more#str-to-num-note

ps。実際Luaはintではなくdoubleに変換します。

数値型は実数(倍精度浮動小数点)数を表します。

http://www.lua.org/pil/2.3.html

2
Marcs

あなたはその中にint 10として "10"を保持するためにアクセサを作ることができます。

例:

x = tonumber("10")

x変数を印刷すると、10ではなくint 10が出力されます。

pythonプロセスと同じ

x = int( "10")

ありがとう。

2
user5555332

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

参照先: http://lua.2524044.n2.nabble.com/ 5-3 -Converting- a-floating-point-number-to -integer-td7664081.html

1
Leslie Krause

tonumber (e [, base])

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を検討して答えました

0
shubham
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
0
Viacheslav