python计算小数_python3学习笔记:执行精确的小数计算

问题

我们需要对小数进行精确计算,不希望因为浮点数天生的误差而带来影响

解决方案

使用decimal模块,牺牲一些性能,得到更高的精度。示例如下:

from decimal import Decimal

a = 4.2

b = 2.1

c = a+b

print(c)

#c= 6.300000000000001

a2 = Decimal('4.2')

b2 = Decimal('2.1')

c2 = a2+b2

print (c2)

#c2 = 6.3

Decimal对象能以任何期望的方式来工作(支持所有常见的数学操作)。如果要将它们打印出来或是在字符串格式化函数中使用,它们看起来就和其他普通的数字一样。

decimal模块的主要功能是允许控制计算过程中的各个方面,这包括数字的位数和四舍五入。要做到这些,需要创建一个本地的上下文环境然后修改其设定。示例如下:

from decimal import 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

decimal模块实现了IBM的通用十进制算术规范。

decimal模块主要用在涉及像金融这一类业务的程序中。在这样的程序里,计算中如果出现微小的误差是不容许的。因此decimal模块提供了一种规避误差的方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值