首页 > 技术文章 > 4.2+2.1 等于什么?

zhang-can 2017-12-30 11:35 原文

肯定等于6.3啊?真的是这样吗? 你去命令行试一下吧

怎么样,结果是这个:6.300000000000001

这些错误是由底层CPU和IEEE 754标准通过自己的浮点单位去执行算术时的特征。 由于Python的浮点数据类型使用底层表示存储数据,因此你没办法去避免这样的误差。

所以,浮点数比较并不是简单的  == 就可以了,如果你想更精确的表示,可以用decimal 模块

In [2]: from decimal import Decimal

In [3]: a = Decimal('4.2')

In [4]: b = Decimal('2.1')

In [5]: a + b
Out[5]: Decimal('6.3')

In [6]: print(a+b)
6.3

In [7]: (a+b) == 6.3
Out[7]: False

In [8]: (a+b) == Decimal('6.3')
Out[8]: True

In [9]: (4.2+2.1) == Decimal('6.3')
Out[9]: False

 

推荐阅读