Lua에서 문자열을 정수로 변환하려면 어떻게해야합니까?
다음과 같은 문자열이 있습니다.
a = "10"
숫자 10으로 변환하고 싶습니다.
Lua에서 문자열을 정수로 변환하려면 어떻게해야합니까?
다음과 같은 문자열이 있습니다.
a = "10"
숫자 10으로 변환하고 싶습니다.
답변:
tonumber
기능을 사용하십시오 . 에서처럼 a = tonumber("10")
.
에서와 같이 산술 연산에서 문자열을 사용하여 암시 적 변환을 강제 할 수 a= "10" + 0
있지만 이는 tonumber
명시 적 으로 사용하는 것만 큼 명확하지 않거나 깨끗하지 않습니다 .
tonumber
대신 사용해야 할 더 많은 이유입니다 !)
+
연결은 항상 명시 적으로 추가 ..
됩니다.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
산출
string
number
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
.
더 명확한 옵션은 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.
주목해야한다 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
접근자를 "10"을 int 10으로 유지하도록 만들 수 있습니다.
예:
x = tonumber("10")
x 변수를 인쇄하면 "10"이 아닌 int 10이 출력됩니다.
파이썬 프로세스와 동일
x = int ( "10")
감사.
Hyperpolyglot을 확인하는 것이 좋습니다. http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
추신. 실제로 Lua는 int가 아닌 double로 변환됩니다.
숫자 유형은 실수 (배정 밀도 부동 소수점) 숫자를 나타냅니다.
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을 고려하여 대답했다.