Quiero que "a" se redondee a 13,95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
La función round
no funciona como esperaba.
Te estás encontrando con el viejo problema con los números de punto flotante que no todos los números pueden ser representados exactamente. La línea de comandos sólo te muestra la forma completa de punto flotante de la memoria.
Con la representación en coma flotante, su versión redondeada es el mismo número. Como los ordenadores son binarios, almacenan los números de punto flotante como un entero y luego lo dividen por una potencia de dos, así que 13,95 se representará de forma similar a 125650429603636838/(2**53).
Los números de doble precisión tienen 53 bits (16 dígitos) de precisión y los flotantes regulares tienen 24 bits (8 dígitos) de precisión. El tipo de punto flotante en Python utiliza la doble precisión para almacenar los valores.
Por ejemplo,
>>> 125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a=13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a,2))
13.95
>>> print("{0:.2f}".format(a))
13.95
>>> print("{0:.2f}".format(round(a,2)))
13.95
>>> print("{0:.15f}".format(round(a,2)))
13.949999999999999
Si sólo busca dos decimales (para mostrar un valor monetario, por ejemplo), tiene un par de opciones mejores:
Puede modificar el formato de salida:
>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95
Está haciendo exactamente lo que le dijiste que hiciera y está funcionando correctamente. Lee más sobre la confusión de punto flotante y tal vez intente con objetos decimales en su lugar.