Вопрос по lua – Lua строка в int

152

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

У меня есть такая строка:

a = "10"

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

Точная ссылка - раздел о принуждении:5.1, 5.2. lhf
@NicolBolas: +1 за вопрос, который является первым результатом Google и дает прямой ответ. ereOn
+1, чтобы компенсировать этот кусающийся тролль Николь: D Петър Петров
Lua просто выполняет автоматическое преобразование между строками и числами. Если вы хотите гарантировать тип, используйте a = tonumber (a). xpol

Ваш Ответ

11   ответов
4

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

a=tonumber(S)

при условии, что есть цифры и только цифры вS он вернет число, но если есть какие-либо символы, которые не являются числами (за исключением периодов для чисел с плавающей запятой) он вернет ноль

2

чтобы сохранить "10" как Int 10 в нем.

Пример:

x = tonumber("10")

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

такой же как процесс Python

x = int ("10")

Благодарю.

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

Output

                                                                                                             
   number
1

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

2

http://hyperpolyglot.org/

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

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

The number type represents real (double-precision floating-point) numbers.

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

4

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

edit: Луа 5,2 или меньше). Если вы действительно хотите преобразовать в & quot; int & quot; (или, по крайней мере, повторить это поведение), вы можете сделать это:

local function ToInteger(number)
    return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end

В этом случае вы явно конвертируете строку (или действительно, что бы это ни было) в число, а затем усекаете число, как это делает приведение (int) в Java.

Edit: Это все еще работает в Lua 5.3, даже несмотря на то, что Lua 5.3 имеет реальные целые числа, так какmath.floor() возвращает целое число, тогда как оператор, такой какnumber // 1 все равно вернет поплавок, еслиnumber это поплавок.

0
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
31

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

@ Рена, нет недостатка в ясности.+ всегда явное дополнение,.. конкатенация.
@lhf: авто принуждение будет работать только на числах. А операторы сравнения (== ~ = & lt; & lt; = & gt; =) не преобразуют свои аргументы. А из соображений производительности следует избегать слишком частого автоматического принуждения
Нет, он "преобразует" 10 " к целому числу, а затем добавить 0 к нему. (Отсутствие ясности является еще одной причиной для использованияtonumber но вместо этого!)
252

tonumber function, Как вa = tonumber("10").

В Lua 5.3 целые (64-битные по умолчанию) обрабатываются соответственно (lua.org/manual/5.3/manual.html): "Числовая константа с дробной точкой или показателем степени означает число с плавающей запятой; в противном случае оно обозначает целое число. & quot;
-1

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

output:

20
a = tonumber (stringnumber) достаточно

Похожие вопросы