首页 > 解决方案 > 为什么小数和仍然有浮点错误?

问题描述

我使用小数模块来尽量避免浮点错误。从十进制模块的纪录片中它说:

十进制数可以精确表示。相反,像 1.1 和 2.2 这样的数字在二进制浮点中没有精确的表示。最终用户通常不会期望 1.1 + 2.2 像二进制浮点那样显示为 3.3000000000000003。

但是当我尝试用小数求和时,我仍然会得到那些浮点错误。

decimal.Decimal(4.04)+decimal.Decimal(4.04)
>>Decimal('8.080000000000000071054273576')

为什么是这样?

标签: python-3.xfloating-pointdecimal

解决方案


尝试在浮点文字周围放置字符串,如下所示:

decimal.Decimal('4.04')+decimal.Decimal('4.04')

在您问题的代码中,原始二进制(基数 2)"float"类型被传递给Decimal. 4.04例如,当您使用字符串表示数字Decimal时,'4.04'精确地以 10 为基数表示。


推荐阅读