Ответ 1
Вы можете использовать math.floor(x)
Возвращает наибольшее целое число, меньшее или равное x.
Хотя Lua не различает числа с плавающей запятой и целые числа, есть некоторые случаи, когда вы хотите использовать целые числа. Каков наилучший способ скрыть число до целого числа, если вы не можете сделать C-подобный прилив или что-то вроде Python int
?
Например, при вычислении индекса для массива в
idx = позиция/ширина
как вы можете гарантировать, что idx
является допустимым индексом массива? Я придумал решение, которое использует string.find
, но, возможно, есть метод, который использует арифметику, которая, очевидно, будет намного быстрее. Мое решение:
function toint(n)
local s = tostring(n)
local i, j = s:find('%.')
if i then
return tonumber(s:sub(1, i-1))
else
return n
end
end
Вы можете использовать math.floor(x)
Возвращает наибольшее целое число, меньшее или равное x.
@Hofstad правильно с предложением math.floor(Number x)
, чтобы исключить биты справа от десятичной дроби, вы можете захотеть вместо этого округлить. Существует нет math.round, но это так же просто, как math.floor(x + 0.5)
. Причина, по которой вы хотите объединить, - это то, что поплавки обычно приблизительны. Например, 1 может быть 0.999999996
12,4 + 0,5 = 12,9, пол 12
12,5 + 0,5 = 13, пол 13
12,6 + 0,5 = 13,1, пол 13
local round = function(a, prec)
return math.floor(a + 0.5*prec) -- where prec is 10^n, starting at 0
end
почему бы просто не использовать math.floor()
? это сделало бы индексы действительными до тех пор, пока числитель и знаменатель неотрицательны и в допустимых пределах.
Lua 5.3 ввел новый оператор, называемый делением пола и обозначенный //
Примеры ударов
Lua 5.3.1 Авторское право (C) 1994-2015 Lua.org, PUC-Rio
<Р → 12//52
больше информации можно найти в ссылка lua