Python:执行精确的浮点数运算

枫铃3年前 (2021-07-09)Python246

需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现.

浮点数的一个普遍问题是它们并不能精确的表示十进制数。并且,即使是最简单的
数学运算也会产生小的误差,比如:

>>> a = 4.2
>>> b = 2.1
>>> a + b
6.300000000000001
>>> (a + b) == 6.3
False

”False“是由于底层CPU和IEEE标准通过自己的浮点单位去执行算术导致的。Python的浮点数据类型使用底层表示存储数据,所以无法无法避免这样的误差。

如果想更加精确(代价是性能损耗),可以使用decimal模块

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> 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对象支持所有的常用数学运算。

真实世界中很少会要求精确到普通浮点数能提供的17 位精度,执行大量运算的时候速度很重要。所以使用不要随便用decimal.

总的来说, decimal 模块主要用在涉及到金融的领域。在这类程序中,哪怕是一点
小小的误差在计算过程中蔓延都是不允许的。因此, decimal 模块为解决这类问题提
供了方法。当Python 和数据库打交道的时候也通常会遇到Decimal 对象,并且,通
常也是在处理金融数据的时候。

相关文章

python中自带的三个装饰器

说到装饰器,就不得不说python自带的三个装饰器: 1、@property 将某函数,做为属性使用 &...

Python老司机给上路新手的3点忠告

Python老司机给上路新手的3点忠告

在你学习编程的过程中,是否有过以下经历,或正在面临类似的局面: ● 网上找了很多资料,不知道从哪里看...

QML使用Python的函数

有2种方法: 一、 QML中定义一个信号,连接Python里的函数; 这里的函数不用特意指明为槽函数࿰...

python传参是传值还是传引用

在此之前先来看看变量和对...

Python:如何仅用递归函数和栈操作逆序一个栈

如何仅用递归函数和栈操作逆序一个栈题目:一个栈依次压入1,2,3,4,5,...

Python函数的递归调用

一:递归的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。