Python中的decimal模块执行精确的浮点运算

《Python中的decimal模块执行精确的浮点运算》

简介

如果你从事科学或工程领域的大多数计算,那么使用普通的浮点类型是比较普遍的做法。因为在真实世界中很少会要求精确到17位精度的普通浮点数。因此,计算过程中的那么一点点的误差是被允许的。其次,原生的二进制浮点数计算要快的多-有时候你在执行大量运算的时候速度也是非常重要的。总的来说,decimal 模块主要用在涉及到金融的领域。在这类程序中,哪怕是一点小小的误差在计算过程中蔓延都是不允许的。因此,decimal 模块为解决这类精度问题提供了方法。decimal意思为十进制,这个模块提供了十进制浮点运算支持。我们在数据库处理金融数据的时候也会遇到 Decimal 对象。

问题

当你在编写科学计算或者金融程序的时候碰到这种情况会让人发狂:

这就是机器进行二进制计算引入的误差,为了消除这样的误差,进行更加精确的浮点计算,就要是用到decimal模块。

Decimal()函数

我们直接导入decimal模块里的所有函数。现在我们可以通过Decimal函数构建十进制浮点数,并进行常规的数值计算。

注意,Decimal函数传入的浮点数必须加引号(”),表示成字符串形式。传入整数时就不用加。Decimal函数的对象类型是decimal.Decimal,可以通过type()函数查看。

浮点数据转换成Decimal

Decimal函数并不建议传入浮点型数据,因为浮点型数据本身就是不精确的。可以通过两种方式传入浮点型数据:

getcontext().prec 设定有效数字

保留4位有效数字。

设定小数位数

保留两位小数。

转换成字符串(string)格式

直接调用str()函数:

点赞