Lua:
Arredondamento de números
Como fazer:
-- O arredondamento básico em Lua não vem integrado, mas você pode definir uma função:
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
-- Para arredondar para um número específico de casas decimais:
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
Aprofundando
Lua não inclui uma função de arredondamento pronta como algumas outras linguagens. Historicamente, você precisa escrever sua própria função ou usar uma biblioteca de terceiros. Os recursos comuns dependem do math.floor()
para arredondar para baixo e do math.ceil()
para arredondar para cima, combinados com adicionar ou subtrair 0.5 antes de fazer isso, dependendo do sinal do número.
Alternativas para criar sua própria função incluem bibliotecas como “lua-users wiki” ou “Penlight”. Cada uma tem seus benefícios e desvantagens, como recursos adicionais ou mais sobrecarga.
Internamente, essas funções normalmente funcionam explorando a maneira como os computadores armazenam números de ponto flutuante. Adicionar 0.5 a um float positivo que você deseja arredondar empurrará ele para além do limiar do próximo valor inteiro, então, quando você aplica o math.floor()
, ele arredonda para baixo para esse inteiro mais próximo.