How can I convert a string to an integer in Lua?
I have a string like this:
a = "10"
I would like it to be converted to 10, the number.
How can I convert a string to an integer in Lua?
I have a string like this:
a = "10"
I would like it to be converted to 10, the number.
All numbers in Lua are floats (edit: Lua 5.2 or less). If you truly want to convert to an "int" (or at least replicate this behavior), you can do this:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
In which case you explicitly convert the string (or really, whatever it is) into a number, and then truncate the number like an (int) cast would do in Java.
Edit: This still works in Lua 5.3, even thought Lua 5.3 has real integers, as math.floor()
returns an integer, whereas an operator such as number // 1
will still return a float if number
is a float.
The clearer option is to use tonumber.
As of 5.3.2, this function will automatically detect (signed) integers, float (if a point is present) and hexadecimal (both integers and floats, if the string starts by "0x" or "0X").
The following snippets are shorter but not equivalent :
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.
It should be noted that math.floor()
always rounds down, and therefore does not yield a sensible result for negative floating point values.
For example, -10.4 represented as an integer would usually be either truncated or rounded to -10. Yet the result of math.floor() is not the same:
math.floor(-10.4) => -11
For truncation with type conversion, the following helper function will work:
function tointeger( x )
num = tonumber( x )
return num < 0 and math.ceil( num ) or math.floor( num )
end
Reference: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
tonumber
takes two arguments, first is string which is converted to number and second is base of e
.
Return value tonumber
is in base 10.
If no base
is provided it converts number to base 10.
> a = '101'
> tonumber(a)
101
If base is provided, it converts it to the given base.
> a = '101'
>
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
>
If e
contains invalid character then it returns 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
I answered considering Lua5.3
I would recomend to check Hyperpolyglot, has an awesome comparison: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
ps. Actually Lua converts into doubles not into ints.
The number type represents real (double-precision floating-point) numbers.