📜  为什么 0.3 – 0.2 在Python中不等于 0.1?

📅  最后修改于: 2022-05-13 01:55:24.728000             🧑  作者: Mango

为什么 0.3 – 0.2 在Python中不等于 0.1?

在本文中,我们将了解为什么Python中的 0.3 – 0.2 不等于 0.1。其背后的原因称为“精度”,这是因为计算机不是以十进制计算,而是以二进制计算。计算机不使用基数为 10 的系统,它们使用基数为 2 的系统(也称为二进制代码)。

下面是实现。

Python3
# code
print(0.3 - 0.2)
print(0.3 - 0.2 == 0.1)


Python3
from decimal import *
  
  
getcontext().prec = 6
print(Decimal("0.3") - Decimal("0.2"))
print(Decimal("0.3") - Decimal("0.2") == Decimal("0.1"))


输出
0.09999999999999998
False

正如您在输出中看到的,0.3 – 0.2 不是 0.1,而是 0.09999999999999998。我们使用十进制(基数 10)进行计算,而计算机使用二进制(基数 2)进行计算。

让我们考虑十进制的 1 / 3 是 0.3333333,十进制的 2 / 3 是 0.6666666,如果两者相加只会得到 0.9999999,它不等于 1。同样,0.3、0.2 也不能用二进制准确表示您使用了多少有效数字。分母为 5 和 2 倍数的分数只能用十进制精确表示,同样分母为 2 倍数的分数只能用二进制精确表示。浮点数使用 IEEE 标准 754 在内部存储,该标准仅在 15-17 位有效数字范围内是正确的。

我们可以使用内置的十进制模块来改变精度并获得准确的结果。 getcontext().prec 可用于设置每个十进制值的精度。默认精度为 28 位。

蟒蛇3

from decimal import *
  
  
getcontext().prec = 6
print(Decimal("0.3") - Decimal("0.2"))
print(Decimal("0.3") - Decimal("0.2") == Decimal("0.1"))
输出
0.1
True