Lua:
Zaokrąglanie liczb
Jak to zrobić:
-- Podstawowe zaokrąglanie w Lua nie jest dostępne od razu, ale można zdefiniować funkcję:
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
-- Aby zaokrąglić do określonego miejsca po przecinku:
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
Szczegółowa analiza
Lua standardowo nie zawiera funkcji zaokrąglania, w przeciwieństwie do niektórych innych języków. Historycznie, musisz napisać własną funkcję lub użyć biblioteki firm trzecich. Powszechne obejścia polegają na stosowaniu math.floor()
do zaokrąglania w dół i math.ceil()
, do zaokrąglania w górę, połączone z dodawaniem lub odejmowaniem 0,5 przed dokonaniem tego, w zależności od znaku liczby.
Alternatywy dla tworzenia własnej funkcji obejmują biblioteki takie jak “lua-users wiki” czy “Penlight”. Każda z nich ma swoje zalety i wady, takie jak dodatkowe funkcje lub większe obciążenie.
Wewnętrznie, te funkcje zazwyczaj działają, wykorzystując sposób, w jaki komputery przechowują liczby zmiennoprzecinkowe. Dodanie 0.5 do dodatniej liczby zmiennoprzecinkowej, którą chcesz zaokrąglić, przesunie ją ponad próg następnej wartości całkowitej, więc gdy zastosujesz math.floor()
, odbywa się zaokrąglenie do najbliższej liczby całkowitej.