Python ROUND_HALF_UP no funciona como se esperaba

Parece que no puedo entender los documentos decimales para obtener 2.775 para redondear a 2.78 usando la clase decimal.

import decimal decimal.getcontext().prec = 7 print(decimal.Decimal(2.775).quantize( decimal.Decimal('0.00'), rounding=decimal.ROUND_HALF_UP )) >> 2.77 # I'm expecting 2.78 

Eso DEBERÍA redondear a 2,78, pero sigo obteniendo 2,77.

EDITAR: Pruebas en python 3.4

Si agrega una sola línea a su código, así:

 print (decimal.Decimal(2.775)) 

entonces verás por qué se redondea hacia abajo:

 2.774999999999999911182158029987476766109466552734375 

El valor 2.775 , como un literal, se almacena como un doble, lo que tiene una precisión limitada.

Si, en cambio, lo especifica como una cadena, el valor se conservará con mayor precisión:

 >>> import decimal >>> print (decimal.Decimal(2.775)) 2.774999999999999911182158029987476766109466552734375 >>> print (decimal.Decimal('2.775')) 2.775