Python十进制-除法,舍入,精度
Python十进制模块可帮助我们进行适当的除法和数字舍入。
Python十进制模块
在Python十进制模块的这一课中,我们将了解如何在程序中管理十进制数字,以进行精度和格式化以及计算。
如果数字处理不正确,十进制数字的精度很容易丢失。
让我们看看小数模块及其可用功能如何在这些方面提供帮助。
使用十进制数字
小数只是具有固定小数点的浮点数。
我们必须根据需要正确地四舍五入数字,否则结果可能会出乎意料。
Python的十进制模块可帮助我们更精确地使用十进制数字。
需要十进制模块
在实际使用此模块之前,让我们看看我们在谈论什么精度,并确定为什么实际上需要此模块。
查看以下代码片段:
division = 72/7 print(division)
好吧,答案实际上并不准确,根本没有小数点!让我们看看如何使用十进制模块来纠正此问题。
使用十进制模块
在本文中创建的所有程序中,我们将在所有程序中导入小数模块:
import decimal
可能是我们只从该模块导入特定功能的情况。
可以这样完成:
from decimal import Decimal
让我们开始将十进制模块放入某些程序中。
Python十进制模块示例
现在,我们将从与该模块有关的示例开始。
用小数更正除法
其中我们将更正上面编写的程序以执行应该产生浮点结果的除法。
带有十进制模块的修改程序如下所示:
import decimal division = decimal.Decimal(72)/decimal.Decimal(7) print(division)
让我们看一下该程序的输出:请注意,该除法现在是正确且精确的,还是太精确了?
单次操作的控制精度
在上一个程序中,答案现在有25个小数位。
但是,如果我们只想要最多三位十进制值怎么办?这也是可以控制的。
其中我们将控制答案的精度,该精度不会反映在程序的其他操作中:
import decimal with decimal.localcontext() as ctx: ctx.prec = 3 division = decimal.Decimal(72)/decimal.Decimal(7) print(division) again = decimal.Decimal(72)/decimal.Decimal(7) print(again)
我们做了两次除法运算以证明这一点。
让我们看看该程序的输出:有发现什么吗?我们设置的精度仅一次有效。
下次我们进行除法时,我们得到了相同的结果。
控制精度,可完成整个程序
也可以在程序中全局控制精度。
当您在程序中处理大量数字时,建议不要始终使用此方法。
这是一个例子:
import decimal decimal.getcontext().prec = 3 division = decimal.Decimal(72)/decimal.Decimal(7) print(division) again = decimal.Decimal(72)/decimal.Decimal(7) print(again)
四舍五入
可以使用round(...)函数优雅地四舍五入数字。
:
import decimal #Can be rounded to 13.48 or 13.49 rounded = round(13.485, 2) print(rounded)
让我们看一下该程序的输出:程序中的数字可以四舍五入为13.48或者13.49。
默认情况下,round(...)函数会向下舍入。
也可以更改:
import decimal #Can be rounded to 13.48 or 13.49 rounded = round(13.485, 2) print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))
获取Python十进制上下文
如果有兴趣查看默认为十进制模块设置的默认上下文,则可以使用以下脚本:
from decimal import * print(getcontext())