Python 3.8.5 浮点数乘以 100 时的奇怪行为

Python 3.8.5 odd behavior when multiplying float by 100

我目前是 运行 python 3.8.5 并使用一些数据创建了一个 pandas DataFrame。在执行了一些计算之后,我得到了单个浮点值,即 .007。然后我将该值乘以 100 得到百分比。但是,我注意到值 returned 是 0.7000000000000001 而不是预期的 .7。我没有在其他 python 环境中测试过,但在 pycharm 和 jupyter 实验室中尝试过。麻烦return同样的结果。

所以,我重新启动内核并尝试 print(.007*100) 并且 returned 结果是一样的。我也尝试了 print(.006*100) 并得到了预期的结果:.6

这是 python 3.8.5 中的错误吗?有没有其他人遇到/可以复制这个问题?

Python 3.8.5 (default, Sep  4 2020, 02:22:02) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.
​
print(.007*100)
print(.006*100)
print(.008*100)
0.7000000000000001
0.6
0.8

这是 python 3.8.5 中的错误吗?

此问题不是版本 3.8.5 特有的,是由 python 中的 floats 的工作方式引起的。 Python decimal module docs 对此进行讨论。您可以使用 decimal.Decimal 来避免此问题,请考虑以下示例

import decimal
print(0.1+0.1+0.1==0.3)
print(decimal.Decimal("0.1")+decimal.Decimal("0.1")+decimal.Decimal("0.1")==decimal.Decimal("0.3"))

输出

False
True