Как я могу преобразовать строку в целое число в Lua?
У меня есть такая строка:
a = "10"
Я хотел бы, чтобы это было преобразовано в 10, число.
Как я могу преобразовать строку в целое число в Lua?
У меня есть такая строка:
a = "10"
Я хотел бы, чтобы это было преобразовано в 10, число.
Используйте функцию tonumber
. Как и в a = tonumber("10")
.
Вы можете принудительно ввести неявное преобразование, используя строку в арифметических операциях, как в a= "10" + 0
, но это не так ясно или не так просто, как явное использование tonumber
.
Все числа в Lua - это float ( edit: Lua 5.2 или меньше). Если вы действительно хотите преобразовать в "int" (или, по крайней мере, повторить это поведение), вы можете сделать это:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
В этом случае вы явно конвертируете строку (или действительно, что бы она ни была) в число, а затем усекали число, подобное тому, которое выполнял бы (int) в Java.
Изменить:. Это все еще работает в Lua 5.3, даже если у Lua 5.3 есть действительные целые числа, поскольку math.floor()
возвращает целое число, тогда как оператор, такой как number // 1
, все равно вернет float, если number
- это поплавок.
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
Выход
string
number
скажем, что строка, которую вы хотите превратить в число, находится в переменной S
a=tonumber(S)
при условии, что в S
есть числа и только числа, он вернет число,
но если есть любые символы, которые не являются числами (кроме периодов для поплавков)
он вернет nil
Более понятным вариантом является использование tonumber.
Начиная с 5.3.2, эта функция автоматически обнаруживает (подписанные) целые числа, числа с плавающей запятой (если точка присутствует) и шестнадцатеричные числа (как целые числа, так и числа с плавающей запятой, если строка начинается с "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.
Я бы рекомендовал проверить Hyperpolyglot, имеет удивительное сравнение: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
пс. На самом деле Lua превращается в двойники не в ints.
Тип номера представляет собой реальную (с плавающей запятой с двойной точностью) числа.
Вы можете сделать аксессуар, чтобы сохранить "10" в нем как int 10.
Пример:
x = tonumber("10")
если вы напечатаете переменную x, она выведет int 10, а не "10"
то же, что и процесс Python
x = int ( "10" )
Спасибо.
Следует отметить, что 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
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
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
вот что вы должны положить
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20