Python十進制-分割、四捨五入、精度

Python decimal模块有助于我们在除法运算中以正确的精度和四舍五入的方式处理数字

Python decimal模块

在这个关于Python中decimal模块的课程中,我们将看到如何在程序中管理小数,以便进行精确的格式化和计算。如果不正确处理数字,小数的精度很容易丧失。让我们看看decimal 模块及其可用函数如何在这些方面提供帮助。

处理小数

小数是带有固定小数点的浮点数。根据需要正确舍入数字非常重要,否则结果可能出乎意料。Python的decimal模块帮助我们更精确地处理小数。

需要十進制模塊

在實際使用此模塊之前,讓我們先看看我們正在談論的精度是什麼,並確定我們實際上為什麼需要此模塊。看一下以下的代碼片段:

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

# 可以四舍五入到 13.48 或 13.49
rounded = round(13.485, 2)
print(rounded)

让我们看看这个程序的输出: 程序中的数字可以四舍五入到 13.48 或 13.49。默认情况下,round(...) 函数向下舍入。这也可以更改:

import decimal

# 可以四舍五入到 13.48 或 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())

讓我們看一下此程序的輸出: 這就是有關 Python 十進制模組的全部內容,當處理浮點數時非常有用。

Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision