Python 在小数运算时,提供了除法、四舍五入和精度控制的功能

Python的decimal模块可以帮助我们在数字除法中实现正确的精度和四舍五入。

Python小数模块

python decimal, python division, python rounding

处理十进制数

十进制数就是带有固定小数点的浮点数。根据我们的需求,我们必须正确地四舍五入数字,否则结果可能出乎意料。Python的decimal模块可以帮助我们更精确地处理十进制数。

需要十进制模块

在实际使用这个模块之前,让我们看看我们谈论的是什么精度,并确定为什么我们实际上需要这个模块。请看以下代码片段:

division = 72 / 7
print(division)
python decimal division

使用十进制模块(decimal模块)

在本帖中,我们将在所有程序中导入decimal模块。

import decimal

可能的情况是,我们只从这个模块中导入特定的函数。可以这样做:

from decimal import Decimal

让我们开始将十进制模块加入到一些程序中。

Python十进制模块示例

我们现在将从与本模块相关的示例开始。

纠正使用小数点进行除法

在这里,我们将修改之前编写的程序,使其执行除法操作,从而得到浮点数结果。带有 decimal 模块的修改后程序将会如下所示:

import decimal

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)
python division of decimal numbers

单个操作的精确控制

在上一个程序中,答案现在有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)
python decimal precision

完整程序的控制精度

在程序中全局控制精度也是可能的。当你在程序中处理大量数字时,不建议始终这样做。以下是一个例子:

import decimal

decimal.getcontext().prec = 3

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)

again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)
python decimal global precision

四舍五入

可以通过round(…)函数将数字取整得到优雅的结果。让我们尝试一下吧。

import decimal

#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(rounded)
python rounding
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 的 Decimal 上下文

如果你有兴趣查看默认的十进制模块默认上下文集合,你可以使用以下脚本:

from decimal import *
print(getcontext())
python decimal context
广告
将在 9 秒后关闭
bannerAds