Когда вы передаете '0.1'
как строку, десятичное число преобразуется в число с плавающей точкой, без потери точности, но теряет точность, когда вы передаете число с плавающей точкой непосредственно как 0.1
, как вы можете видеть ниже
>>> Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>> Decimal('0.1')
Decimal('0.1')
Это приводит к всевозможным странным результатам
>>> Decimal(0.3) - Decimal(0.1) + Decimal(0.1) + Decimal(0.1)
Decimal('0.3999999999999999944488848768')