程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

如何在Python中使用十進制模塊

編輯:Python

本文將介紹Python中 "小數 "模塊的使用指南。它可以用來對浮點數或含有小數點的數字進行各種數學運算。

關於小數模塊

小數模塊,顧名思義,可以用來處理有小數點的數字或浮動型數字。該模塊中包含的方法有助於對小數點數字進行四捨五入,轉換數字和進行算術計算。它還非常注重精確性和准確性,小數點後的每個數字都被認為是重要的。小數點模塊認為1.40這樣的數字是1.40,而不是1.4。小數點模塊的使用可以通過實例得到最好的理解。下面將對其中的一些例子進行解釋。

使用十進制模塊進行基本的數學計算

你可以在Python中調用十進制構造函數來將一個數字轉換為十進制類型。下面的代碼示例顯示了在整數類型的數字上進行的基本數學除法和小數類型的數字之間的區別。

from decimal import Decimal
a = 10
b = 11
c = a / b
d = Decimal(a) / Decimal(b)
print (c, type(c))
print (d, type(d))

第一條語句從十進制模塊中導入十進制類。接下來,兩個變量 "a "和 "b "被創建,帶有一些值。變量 "c "存儲了一個由變量a除以b產生的數值,然後重復同樣的過程,將數字轉換為十進制類型對象。運行上述代碼示例後,你應該得到以下輸出。

0.9090909090909091 <class 'float'>
0.9090909090909090909090909091 <class 'decimal.Decimal'>

正如你在上面的輸出中看到的,float類型對象顯示的數字比十進制類型對象的精度要低,因為它使用了比十進制類型對象更積極的近似方法。默認情況下,Python中的十進制類型數字最多顯示28個數字。你可以通過調用十進制模塊中的 "getcontext "方法根據你的需要改變這個值。

from decimal import Decimal
from decimal import getcontext
getcontext().prec = 50
a = 10
b = 11
c = a / b
d = Decimal(a) / Decimal(b)
print (c, type(c))
print (d, type(d))

在上面的代碼示例中,getcontext函數已經被導入,並且精度位置已經被設置為最多50個位置。getcontext方法可以用來查看線程中的當前上下文,並改變小數模塊的一些默認配置參數。運行上述代碼示例後,你應該得到以下輸出。

0.9090909090909091 <class 'float'>
0.90909090909090909090909090909090909090909090909091 <class 'decimal.Decimal'>

你可以用十進制類型的對象進行任何類型的算術計算,就像你在Python中用float類型的對象進行計算一樣。十進制類型對象中大量的尾部小數可以帶來精確的數字,在金融、會計、關鍵任務的科學應用等方面特別有用。

注意,你可以通過調用主Decimal構造函數,從浮點數、整數和包含數字的字符串中創建十進制類型的數字。

使用十進制模塊對數字進行捨入

十進制模塊帶有一些預定義的四捨五入模式,你可以用這些模式來捨棄帶有小數點的數字。這些模式被稱為 ROUND_FLOOR, ROUND_CEILING, ROUND_HALF_DOWN, ROUND_HALF_UP, ROUND_UP, ROUND_DOWN, ROUND_HALF_EVEN, 和 ROUND_05UP。根據Python官方文檔,下面是這些模式的各自作用。

  • ROUND_FLOOR: 數值被四捨五入到負無窮大。
  • ROUND_CEILING: 數字被四捨五入到無窮大或正無窮大。
  • ROUND_HALF_DOWN: 數字被四捨五入到最近的數字。如果有一個平局,數字被四捨五入到零。平局是指可以向上或向下捨入的等距數字。例如,像4.25這樣的數字可以向4.2和4.3四捨五入。
  • ROUND_HALF_UP:數字被四捨五入到最近的數字。如果出現平局,則從零開始取整。
  • ROUND_UP: 數字從零開始四捨五入。
  • ROUND_DOWN: 數字被四捨五入到零。
  • ROUND_HALF_EVEN: 數字被四捨五入到最近的數字。任何並列的數字都被四捨五入為最接近的偶數整數。
  • ROUND_05UP: 如果最後一個數字是0或5,則從零開始取整。如果不是,那麼數字將被四捨五入為零。

下面的代碼示例顯示了這些模式的行為。

import decimal
from decimal import Decimal
from decimal import getcontext
getcontext().prec = 2
getcontext().rounding = decimal.ROUND_FLOOR
print (Decimal(3.961) + Decimal(0))
getcontext().rounding = decimal.ROUND_CEILING
print (Decimal(3.961) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_DOWN
print (Decimal(3.705) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_UP
print (Decimal(3.775) + Decimal(0))
getcontext().rounding = decimal.ROUND_UP
print (Decimal(3.775) + Decimal(0))
getcontext().rounding = decimal.ROUND_DOWN
print (Decimal(3.609) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_EVEN
print (Decimal(3.665) + Decimal(0))
getcontext().rounding = decimal.ROUND_05UP
print (Decimal(3.675) + Decimal(0))

這個代碼示例非常直接。為四捨五入的數字設置了2位的精度。通過設置 "四捨五入 "對象(主上下文的一部分)的值來改變捨入方法。運行上述代碼樣本後,你應該得到以下輸出,其中每一行都對應著各自的四捨五入模式。

3.9
4.0
3.7
3.8
3.8
3.6
3.7
3.6

使用量化方法進行捨入

你也可以使用十進制模塊中的 "量化 "方法對數字進行捨入。這個過程與上面解釋的方法相同。然而,你可以提供一個指數作為量化方法的參數,將一個數字四捨五入到一個特定的位置,而不是單獨設置精度的數字。下面是一個代碼示例。

import decimal
from decimal import Decimal
rounded = Decimal(3.961).quantize(Decimal('1.0'), rounding=decimal.ROUND_FLOOR)
print (rounded)

指數'1.0'已被提供給quantize方法,四捨五入方法已被作為額外參數提供。它將返回一個X.X格式的數字。運行上述代碼樣本後,你應該得到以下輸出。

3.9

比較兩個十進制數字

你可以使用小數模塊中的 "比較 "方法來比較任何兩個小數類型的對象。下面的例子顯示了它的用法。

from decimal import Decimal
print (Decimal(1.2).compare(Decimal(1.1)))
print (Decimal(1.0).compare(Decimal(1.1)))
print (Decimal(1.0).compare(Decimal(1.0)))

你可以在一個十進制類型的對象上調用比較方法,並提供另一個數字作為參數。根據被比較的數字,將返回一個0、1或-1的值。值為0表示兩個數字相等,值為1表示第一個數字大於第二個數字,值為1表示第一個數字小於第二個數字。 運行上述代碼樣本後,你應該得到以下輸出。

1
-1
0

結論

盡管小數點模塊最常被用來控制小數點的精度和對小數點後的數字進行四捨五入,但它也有一些其他有用的方法,可以進一步用來操作小數點數字,以產生准確的算術計算結果。本文已經介紹了小數點模塊的基本用法,對大多數情況來說應該是足夠了。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved