Lua文字列から整数


183

Luaで文字列を整数に変換するにはどうすればよいですか?

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

a = "10"

数字の10に換算してほしい。


6
:正確なリンクは強制に関するセクションで5.15.2
lhf

5
@NicolBolas:Googleの最初の結果であり、的確な回答を提供する質問をすることの+1。
ereOn 2014年

2
D:この食い込みトロールニコル補償する+1
ПетърПетров

Luaは文字列と数値の間の変換を自動的に行います。タイプを確認する場合は、a = tonumber(a)を使用します。
xpol

回答:



33

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


2
いいえ、 "10"を整数に変換し、それに0を追加します。(ただし、明快さの欠如がtonumber代わりに使用する理由です)
Rena

16
@Rena、明快さの不足はありません。+常に明示的に加算されます..-連結。
Oleg

1
@lhf:自動強制は数値でのみ機能します。また、比較演算子(==〜= <> <=> =)は引数を変換しません。また、パフォーマンス上の理由から、自動強制に過度に依存することは避けてください
wsha

9
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

出力

   string                                                                                                                                                                          
   number

8

Luaのすべての数値は浮動小数点数です(編集: Lua 5.2以下)。本当に「int」に変換したい(または少なくともこの動作を複製したい)場合は、次のようにできます。

local function ToInteger(number)
    return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end

その場合、文字列(または実際には何でも)を明示的に数値に変換し、Javaで(int)キャストが行うように数値を切り捨てます。

編集:これはまだLuaの5.3で動作し、でも、Luaの5.3のように、実際の整数値を持っていると思ったmath.floor()ようなオペレータに対し戻っ整数、number // 1場合まだfloatを返しますnumberフロートです。


5

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

a=tonumber(S)

数字があり、数字だけが数字Sを返すことを条件としますが、数字ではない文字がある場合(浮動小数のピリオドを除く)、nilを返します


4

より明確なオプションはtonumberを使用することです

5.3.2以降、この関数は(符号付き)整数、浮動小数点(点が存在する場合)および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.

3

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


2

アクセサを作成して、「10」をint 10として保持できます。

例:

x = tonumber("10")

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

Pythonプロセスと同じ

x = int( "10")

ありがとう。



1

tonumber (e [, base])

tonumber2つの引数を取ります。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を考慮して答えました



-1

ここにあなたが置くべきものがあります

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20

a = tonumber(stringnumber)で十分です
wsha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.