В Lua 5.3 целые числа (64-разрядные по умолчанию) обрабатываются соответствующим образом ( lua.org/manual/5.3/manual.html ): «Числовая константа с дробной точкой или показателем степени обозначает число с плавающей точкой; в противном случае оно обозначает целое число».
Кевин Ли
33
Вы можете форсировать неявное преобразование, используя строку в арифметических операциях, например, in a= "10" + 0, но это не так ясно и не так чисто, как использование tonumberявно.
Нет, он преобразует «10» в целое число, а затем добавит к нему 0. (Отсутствие ясности является еще одной причиной для использования tonumberвместо этого!)
Рена
16
@ Рена, нет недостатка в ясности. +всегда является явным дополнением, ..- конкатенация.
Волков Олег Викторович
1
@lhf: авто принуждение будет работать только на числах. И операторы сравнения (== ~ = <> <=> =) не преобразуют свои аргументы. А из соображений производительности вам следует избегать слишком
частого
9
local a ="10"
print(type(a))local num = tonumber(a)
print(type(num))
Все числа в Lua являются числами с плавающей запятой ( редактировать: Lua 5.2 или меньше). Если вы действительно хотите преобразовать в «int» (или хотя бы повторить это поведение), вы можете сделать это:
localfunction 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это float.
скажем, строка, которую вы хотите превратить в число, находится в переменной S
a=tonumber(S)
при условии, что в нем есть числа и только числа Sвозвращают число, но если есть какие-либо символы, которые не являются числами (за исключением периодов для чисел с плавающей запятой), он вернет ноль
Более понятным вариантом является использование 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.
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
Ответы:
Используйте
tonumber
функцию . Как вa = tonumber("10")
.источник
Вы можете форсировать неявное преобразование, используя строку в арифметических операциях, например, in
a= "10" + 0
, но это не так ясно и не так чисто, как использованиеtonumber
явно.источник
tonumber
вместо этого!)+
всегда является явным дополнением,..
- конкатенация.Вывод
источник
Все числа в Lua являются числами с плавающей запятой ( редактировать: Lua 5.2 или меньше). Если вы действительно хотите преобразовать в «int» (или хотя бы повторить это поведение), вы можете сделать это:
В этом случае вы явно конвертируете строку (или действительно, что бы это ни было) в число, а затем усекаете число, как это делает приведение (int) в Java.
Редактировать: Это все еще работает в Lua 5.3, даже несмотря на то, что Lua 5.3 имеет действительные целые числа, поскольку
math.floor()
возвращает целое число, тогда как оператор, такой как,number // 1
все еще будет возвращать float, еслиnumber
это float.источник
скажем, строка, которую вы хотите превратить в число, находится в переменной
S
при условии, что в нем есть числа и только числа
S
возвращают число, но если есть какие-либо символы, которые не являются числами (за исключением периодов для чисел с плавающей запятой), он вернет нольисточник
Более понятным вариантом является использование tonumber .
Начиная с 5.3.2, эта функция автоматически обнаруживает (подписанные) целые числа, числа с плавающей запятой (если точка присутствует) и шестнадцатеричные числа (как целые числа, так и числа с плавающей запятой, если строка начинается с "0x" или "0X").
Следующие фрагменты короче, но не эквивалентны:
источник
Следует отметить, что
math.floor()
всегда округляется, и, следовательно, не дает ощутимого результата для отрицательных значений с плавающей запятой.Например, -10.4, представленное как целое число, обычно либо усекается, либо округляется до -10. И все же результат math.floor () не тот же:
Для усечения с преобразованием типов будет работать следующая вспомогательная функция:
Ссылка: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html
источник
Вы можете сделать аксессор, чтобы в нем оставалось «10» как int 10.
Пример:
если вы напечатаете переменную x, она выведет int 10, а не «10»
такой же как процесс Python
x = int ("10")
Спасибо.
источник
Я бы порекомендовал проверить Гиперполиглот, есть отличное сравнение: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
пс. На самом деле Lua превращается в двойники, а не в целые.
http://www.lua.org/pil/2.3.html
источник
tonumber (e [, base])
tonumber
принимает два аргумента, первый - строка, которая преобразуется в число, а второй - основаниеe
.Возвращаемое значение
tonumber
находится в базе 10.Если нет,
base
он преобразует число в основание 10.Если база предоставлена, она преобразует ее в данную базу.
Если
e
содержит недопустимый символ, то возвращаетсяnil
.Я ответил, учитывая Lua5.3
источник
источник
вот что вы должны поставить
источник