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()
, воно округляється вниз до цього найближчого цілого числа.