Arredondamento de números

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.

Veja Também