Lua строка в int


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

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

a = "10"

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

11 140
lua

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 - это поплавок.

local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

выход

   string                                                                                                                                                                          
   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.

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

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

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

вот что вы должны поставить

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20