Если вы добавите одну строчку в свой код:
print (decimal.Decimal(2.775))
, то вы увидите , почему округляется:
2.774999999999999911182158029987476766109466552734375
Значение 2.775
, как литерал, сохраняется как double, , который имеет ограниченную точность.
Если вы укажете его как строку, значение будет сохранено больше точно:
>>> import decimal
>>> print (decimal.Decimal(2.775))
2.774999999999999911182158029987476766109466552734375
>>> print (decimal.Decimal('2.775'))
2.775