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

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

Смотрите также