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模块提供了一种规避误差的方式。

你可能感兴趣的:(python3学习笔记:执行精确的小数计算)