Im使用小数模块来尝试避免浮点错误。在十进制模块的记录片中显示:
小数可以精确表示。相反,像1.1和2.2在二进制浮点数中没有确切的表示形式。最终用户通常不希望1.1 + 2.2显示为3.3000000000000003,就像处理二进制浮点一样。
但是当我尝试用小数求和时,我仍然会得到那些浮点错误。
decimal.Decimal(4.04)+decimal.Decimal(4.04)
>>Decimal('8.080000000000000071054273576')
这是为什么?
尝试将字符串放在浮点文字周围,如下所示:
decimal.Decimal('4.04')+decimal.Decimal('4.04')
在您问题的代码中,原始二进制(基数2)"float"
类型传递给Decimal
。例如,当您使用字符串表示数字4.04
时,Decimal
恰好以10为底表示'4.04'
。