Строка Lua для int

Как преобразовать строку в целое число в Lua? Спасибо.

У меня есть строка вроде этого:

a = "10"

Я бы хотел, чтобы он был преобразован в 10, число.

4b9b3361

Вы можете принудительно ввести неявное преобразование, используя строку в арифметических операциях, как в a= "10" + 0, но это не так ясно или не так просто, как явное использование tonumber.

26
ответ дан 09 июня '12 в 21:52
источник

Все числа в 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 - это поплавок.

7
ответ дан 28 авг. '14 в 18:08
источник
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

Выход

   string                                                                                                                                                                          
   number
4
ответ дан 26 марта '15 в 19:34
источник

скажем, что строка, которую вы хотите превратить в число, находится в переменной S

a=tonumber(S)

при условии, что в S есть числа и только числа, он вернет число, но если есть любые символы, которые не являются числами (кроме периодов для поплавков) он вернет nil

2
ответ дан 12 марта '15 в 19:36
источник

Более ясная опция - использовать 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.tonteger, it errors if it fails
    
2
ответ дан 29 апр. '16 в 21:13
источник

Вы можете сделать аксессуар, чтобы сохранить "10" в нем как int 10.

Пример:

x = tonumber("10")

если вы напечатаете переменную x, она выведет int 10, а не "10"

то же, что и процесс Python

x = int ( "10" )

Спасибо.

1
ответ дан 12 июля '15 в 12:19
источник

Я бы рекомендовал проверить Hyperpolyglot, имеет удивительное сравнение: http://hyperpolyglot.org/

http://hyperpolyglot.org/more#str-to-num-note

пс. На самом деле Lua превращается в двойники не в ints.

Тип номера представляет собой реальную (с плавающей запятой с двойной точностью) числа.

http://www.lua.org/pil/2.3.html

1
ответ дан 28 нояб. '14 в 19:19
источник