python精确运算_Python:执行精确的浮点数运算

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

浮点数的一个普遍问题是它们并不能精确的表示十进制数。并且,即使是最简单的

数学运算也会产生小的误差,比如:

>>> a = 4.2

>>> b = 2.1

>>> a + b

6.300000000000001

>>> (a + b) == 6.3

False

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

如果想更加精确(代价是性能损耗),可以使用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对象支持所有的常用数学运算。

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

总的来说, decimal 模块主要用在涉及到金融的领域。在这类程序中,哪怕是一点

小小的误差在计算过程中蔓延都是不允许的。因此, decimal 模块为解决这类问题提

供了方法。当Python 和数据库打交道的时候也通常会遇到Decimal 对象,并且,通

常也是在处理金融数据的时候。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值