Python中的浮点数如何计算?

python

1、浮点数的一个普遍的问题是它们不能精确的表示十进制数。

>>> a = 4.2

>>> b = 2.1

>>> a + b

6.300000000000001

>>> (a + b) == 6.3

False

这是由于底层 CPU 和IEEE 754 标准通过自己的浮点单位去执行算术时的特征。看似有穷的小数, 在计算机的二进制表示里却是无穷的。

一般情况下,这一点点的小误差是允许存在的。如果不能容忍这种误差(比如金融领域),那么就要考虑用一些途径来解决这个问题了。

2、Decimal

使用这个模块不会出现任何小误差。

>>> from decimal import Decimal

>>> a = Decimal('4.2')

>>> b = Decimal('2.1')

>>> a + b

Decimal('6.3')

>>> print(a + b)

6.3

>>> (a + b) == Decimal('6.3')

True

尽管代码看起来比较奇怪,使用字符串来表示数字,但是 Decimal 支持所有常用的数学运算。 decimal 模块允许你控制计算的每一方面,包括数字位数和四舍五入。在这样做之前,需要创建一个临时上下文环境来改变这种设定:

>>> from decimal import Decimal, localcontext

>>> a = Decimal('1.3')

>>> b = Decimal('1.7')

>>> print(a / b)

0.7647058823529411764705882353

>>> with localcontext() as ctx:

...  ctx.prec = 3

...  print(a / b)

...

0.765

>>> with localcontext() as ctx:

...  ctx.prec = 50

...  print(a / b)

...

0.76470588235294117647058823529411764705882352941176

>>>

以上是 Python中的浮点数如何计算? 的全部内容, 来源链接: utcz.com/z/527511.html

回到顶部