루아 문자열을 int로


183

Lua에서 문자열을 정수로 변환하려면 어떻게해야합니까?

다음과 같은 문자열이 있습니다.

a = "10"

숫자 10으로 변환하고 싶습니다.


6
정확한 링크는 강제에 대한 섹션입니다 : 5.1 , 5.2 .
lhf

5
@NicolBolas : 첫 번째 Google 검색 결과이며 간단한 답변을 제공하는 질문에 대해 +1
ereOn

2
+1이 트롤을 보상합니다 Nicol : D
Петър Петров

루아는 문자열과 숫자를 자동으로 변환합니다. 유형을 확인하려면 a = tonumber (a)를 사용하십시오.
xpol

답변:



33

에서와 같이 산술 연산에서 문자열을 사용하여 암시 적 변환을 강제 할 수 a= "10" + 0있지만 이는 tonumber명시 적 으로 사용하는 것만 큼 명확하지 않거나 깨끗하지 않습니다 .


2
아니요, "10"을 정수로 변환 한 다음 0을 추가합니다. (명확성의 부족은 tonumber대신 사용해야 할 더 많은 이유입니다 !)
Rena

16
@Rena, 명확성이 부족하지 않습니다. +연결은 항상 명시 적으로 추가 ..됩니다.
Oleg V. Volkov

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부동 소수점 인 경우 여전히 부동 소수점을 반환합니다 number.


5

숫자로 바꾸려는 문자열이 변수에 있다고 말합니다. S

a=tonumber(S)

숫자가 있고 숫자 만 있으면 숫자를 S반환하지만 숫자가 아닌 문자가 있으면 (float의 마침표 제외) 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이 출력됩니다.

파이썬 프로세스와 동일

x = int ( "10")

감사.



1

tonumber (e [, base])

tonumber두 개의 인수를 취합니다. 첫 번째는 숫자로 변환 된 문자열이고 두 번째는 기본입니다 e.

반환 값 tonumber은 10 진입니다.

base제공 되지 않으면 숫자를 10 진수로 변환합니다.

> a = '101'
> tonumber(a)
101

베이스가 제공되면 지정된베이스로 변환합니다.

> 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
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

-1

여기에 넣어야 할 것이 있습니다

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

output:

20

a = tonumber (stringnumber)는
충분합니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.