Afronden van getallen

Lua:
Afronden van getallen

Hoe:

-- Basis afronding in Lua is niet ingebouwd, maar je kunt een functie definiëren:

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

-- Om naar een specifieke decimale plaats af te ronden:
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

Diepgaand

Lua bevat standaard geen afrondfunctie, in tegenstelling tot sommige andere talen. Geschiedenlijk moet je je eigen schrijven of een bibliotheek van derden gebruiken. Veelgebruikte oplossingen vertrouwen op math.floor() voor het afronden naar beneden en math.ceil() voor het afronden naar boven, gecombineerd met het toevoegen of aftrekken van 0.5 daarvoor, afhankelijk van het teken van het getal.

Alternatieven voor het maken van je eigen functie omvatten bibliotheken zoals “lua-users wiki” of “Penlight”. Elk heeft zijn voordelen en nadelen, zoals extra functies of meer overhead.

Intern werken deze functies normaal gesproken door gebruik te maken van de manier waarop computers zwevende-kommagetallen opslaan. Het toevoegen van 0.5 aan een positieve float die je wilt afronden zal het over de drempel van de volgende geheel getalwaarde duwen, dus wanneer je math.floor() toepast, rondt het af naar beneden naar dat dichtstbijzijnde geheel getal.

Zie Ook