Lua:
Округление чисел
Как это сделать:
-- Базовое округление в Lua не предусмотрено изначально, но вы можете определить функцию:
function round(num)
return num >= 0 and math.floor(num + 0.5) or math.ceil(num - 0.5)
end
print(round(3.5)) -- 4
print(round(2.3)) -- 2
print(round(-1.6)) -- -2
-- Чтобы округлить к определенному десятичному разряду:
function round(num, decimalPlaces)
local mult = 10^(decimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
print(round(3.14159, 2)) -- 3.14
print(round(1.98765, 3)) -- 1.988
Подробно
Lua изначально не включает функцию округления в отличие от некоторых других языков. Исторически, вам нужно было писать свою собственную функцию или использовать стороннюю библиотеку. Обычные решения задачи основываются на math.floor()
для округления вниз и math.ceil()
для округления вверх, в сочетании с добавлением или вычитанием 0.5 до этого, в зависимости от знака числа.
Альтернативы созданию собственной функции включают такие библиотеки, как “lua-users wiki” или “Penlight”. Каждая имеет свои преимущества и недостатки, такие как дополнительные функции или большая нагрузка.
Внутренне, эти функции обычно работают, используя способ, которым компьютеры хранят числа с плавающей точкой. Добавление 0.5 к положительному числу с плавающей точкой, которое вы хотите округлить, переводит его через порог следующего целого значения, так что когда вы применяете math.floor()
, это округляется вниз до ближайшего целого числа.