Eu estava apenas relendo o que há de novo no Python 3.0 e ele afirma:
A estratégia de arredondamento da função round () e o tipo de retorno foram alterados. Os casos exatos na metade agora são arredondados para o resultado par mais próximo, em vez de se afastarem de zero. (Por exemplo, a rodada (2,5) agora retorna 2 em vez de 3.)
e a documentação para a rodada :
Para os tipos internos que suportam round (), os valores são arredondados para o múltiplo mais próximo de 10 para a potência menos n; se dois múltiplos estão igualmente próximos, o arredondamento é feito para a escolha uniforme
Portanto, na v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
como eu esperava. No entanto, agora na v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Isso parece contra-intuitivo e contrário ao que eu entendo sobre arredondamentos (e com a intenção de enganar as pessoas). O inglês não é minha língua nativa, mas até ler isso, pensei que sabia o que significava o arredondamento: - / Tenho certeza de que, na época em que a v3 foi introduzida, devia haver alguma discussão sobre isso, mas não consegui encontrar uma boa razão para isso. minha pesquisa.
- Alguém tem uma idéia de por que isso foi alterado para isso?
- Existem outras linguagens de programação convencionais (por exemplo, C, C ++, Java, Perl, ..) que fazem esse tipo de arredondamento (para mim inconsistente)?
O que estou perdendo aqui?
UPDATE: O comentário de @ Li-aungYip sobre "Arredondamento de banqueiro" me deu o termo de pesquisa / palavras-chave corretas para pesquisar e encontrei a seguinte pergunta: Por que o .NET usa o arredondamento de banqueiros como padrão? , então eu vou ler isso com atenção.