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