Estaba volviendo a leer What's New In Python 3.0 y dice:
La estrategia de redondeo de la función round () y el tipo de retorno han cambiado. Los casos intermedios exactos ahora se redondean al resultado par más cercano en lugar de alejarse de cero. (Por ejemplo, la ronda (2.5) ahora devuelve 2 en lugar de 3.)
y la documentación para la ronda :
Para los tipos integrados que admiten round (), los valores se redondean al múltiplo más cercano de 10 a la potencia menos n; si dos múltiplos están igualmente cerca, el redondeo se realiza hacia la opción pareja
Entonces, bajo v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
como hubiera esperado Sin embargo, ahora bajo v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Esto parece contrario a la intuición y contrario a lo que entiendo sobre el redondeo (y está destinado a hacer tropezar a las personas). El inglés no es mi lengua materna, pero hasta que leí esto pensé que sabía lo que significaba el redondeo: - / Estoy seguro de que en el momento en que se introdujo la v3 debe haber habido una discusión sobre esto, pero no pude encontrar una buena razón en mi busqueda
- ¿Alguien tiene idea de por qué esto se cambió a esto?
- ¿Hay otros lenguajes de programación convencionales (por ejemplo, C, C ++, Java, Perl, ..) que hacen este tipo de redondeo (para mí inconsistente)?
¿Que me estoy perdiendo aqui?
ACTUALIZACIÓN: El comentario de @ Li-aungYip sobre "Redondeo del banco" me dio el término / palabras clave de búsqueda correctos para buscar y encontré esta pregunta SO: ¿Por qué .NET usa el redondeo del banco de manera predeterminada? , así que lo leeré con cuidado.