O arredondamento de números em Python 3 pode ser feito usando uma função builtinchamada >>> round(1.2) 1 >>> round(1.8) 2 Ela ainda aceita um segundo parâmetro, que indica quantos dígitos de precisão queremos no resultado. O valor padrão desse parâmetro é 0, mas podemos passar qualquer valor: >>> round(1.847, ndigits=2) 1.85 >>> round(1.847, ndigits=1) 1.8 E o que será que acontece quando queremos arredondar um número como 1.5? A >>> round(1.5) 2 Arredonda pra cima? Vamos ver mais um número só pra ter certeza: >>> round(2.5) 2 Ops, agora foi pra baixo! Vamos ver mais alguns: >>> round(3.5) 4 >>> round(4.5) 4 >>> round(5.5) 6 Calma aí que tudo tem uma explicação. Em Python 3, a
Agora faz sentido né? Revendo os exemplos dali de cima, vemos que o arredondamento sempre foi feito pro par mais próximo: >>> round(3.5) 4 >>> round(4.5) 4 >>> round(5.5) 6 No caso do 3.5, tanto o 3 quanto o 4 estão à mesma distância dele. Ou seja, deu empate. Como a regra determina, E em Python 2?Em Python 2 é diferente. O empate em arredondamentos é sempre resolvido pra cima, em caso de números positivos: >>> round(1.5) 2.0 >>> round(2.5) 3.0 E pra baixo, em caso de números negativos: >>> round(-1.5) -2.0 >>> round(-2.5) -3.0 Mas por que Python 3 faz diferente?O objetivo é deixar o arredondamento menos tendencioso. Imagine um banco onde todos os arredondamentos são feitos para cima. Ao final do dia, o relatório de receitas do banco vai mostrar um valor mais alto do que o banco realmente recebeu. É exatamente o que acontece em Python 2: >>> valores = [1.5, 2.5, 3.5, 4.5] >>> sum(valores) 12.0 >>> sum(round(v) for v in valores) 14.0 Usando a regra de arredondamento de Python 3, os valores arredondados nas operações tendem a ser amortizados, porque metade deles vai ser para cima e a outra metade para baixo, visto que metade dos números existente são pares e a outra metade são ímpares. Veja o mesmo código, agora rodando em Python 3: >>> valores = [1.5, 2.5, 3.5, 4.5] >>> sum(valores) 12.0 >>> sum(round(v) for v in valores) 12 Na realidade, isso não é uma novidade de Python 3. Esse tipo de arredondamento é antigo e tem até nome: Bankers Rounding (Arredondamento de Banqueiros). Se ficou interessado no assunto, dê uma olhada num outro post daqui do blog, que mostra como funciona a divisão inteira em Python: https://pythonhelp.wordpress.com/2013/06/30/comportamento-inesperado-na-divisao-inteira/ |
Deixe um comentário