Округлення чисел

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

Дивіться Також