[lua] 루아 문자열을 int로

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

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

a = "10"

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



답변

tonumber기능을 사용하십시오 . 에서처럼 a = tonumber("10").


답변

에서와 같이 산술 연산에서 문자열을 사용하여 암시 적 변환을 강제 할 수 a= "10" + 0있지만 이는 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.


답변

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

a=tonumber(S)

숫자가 있고 숫자 만 있으면 숫자를 S반환하지만 숫자가 아닌 문자가 있으면 (float의 마침표 제외) nil을 반환합니다


답변

더 명확한 옵션은 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