Python - K 位小數


在計算機科學中,我們將十進位制數定義為使用基數 10 表示法的數字。例如 12、4、5.7、99 是十進位制數,因為它們使用基數 10 表示法。我們可以將十進位制數的長度定義為十進位制數中存在的數字個數。更準確地說,十進位制數中存在的有效數字包括小數部分前後兩個數字。本文將探討幾種查詢 k 位小數的方法,例如 round 方法、字串格式化、全域性精度等。

使用 round 方法

控制小數位精度最簡單的方法之一是使用 round 方法。這是 Python 的內建方法。它接受兩個引數:我們需要四捨五入的數字以及我們需要四捨五入的小數位數。

語法

round(number, k)

這裡 number 是十進位制數,k 是我們需要對數字進行四捨五入的小數位。它返回一個具有所需四捨五入的十進位制數。請注意,四捨五入將遵循傳統的數學規則。

示例

在以下程式碼中,我們建立了一個名為 round_off 的函式,它接受十進位制數和 k(小數位數)作為引數。在函式下,我們使用了 Python 的 round 方法,其中我們將 number 和 k 作為引數傳遞。我們將結果儲存在變數 rounded 中並返回它。我們使用了一個數字進行測試目的並呼叫了該函式,傳遞了必要的引數。我們利用字串格式化列印了結果。請注意,這裡我們已經四捨五入了 3 位小數。

def round_off(number, k):
    rounded = round(number, k)  
    return rounded  
k=3
number=  3.141592653589793
print(f"The number {number} round off to {k} decimal places is: {round_off(number, k)}")

輸出

The number 3.141592653589793 round off to 3 decimal places is: 3.142

使用字串格式化

在前面的示例中,我們看到了如何使用 round 方法對數字進行四捨五入。round 方法遵循傳統的數學計算規則。但是,我們可能需要以稍微不同的方式進行四捨五入。我們可能需要截斷數字而不是四捨五入數字。字串格式化是一種執行此操作的極好方法。

語法

"%.nf" % number

這裡 n 是我們需要格式化小數位的小數位數。“number” 是十進位制數。其餘的是我們需要遵循的語法。

示例

我們在以下示例中使用了字串格式化方法對十進位制數進行四捨五入。我們定義了 round_off 方法,它接受十進位制數和 k 作為引數。它是一個非空方法並返回格式化的字串。我們使用了 Python 中的字串格式化表示法來格式化字串。

def round_off(number, k):
    formatted = f"%.{k}f" % number  
    return formatted

k=5
number=  7.7486492653
print(f"The number {number} round off to {k} decimal places is : {round_off(number, k)}")

輸出

The number 7.7486492653 round off to 5 decimal places is : 7.74865

設定全域性精度

預設情況下,在二進位制格式中處理十進位制數的方式存在一些差異。例如,如果您嘗試執行以下命令

print(1.1+2.2) 

您將得到 3.3000000000000003 而不是 3.3。這不是 Python 的錯誤,而是由於作業系統如何處理二進位制表示。但是,我們需要將十進位制數的精度控制到良好的精度,即使是非常小的數字也非常重要。decimal 庫可以幫助我們解決這種情況。它為我們提供了一種解決此問題的方法,稱為 getcontext()。我們可以在全域性級別設定十進位制數的精度。

示例

from decimal import Decimal, getcontext
print(1.1+2.2)
getcontext().prec=16
print(Decimal(1.1)+Decimal(2.2))

輸出

3.3000000000000003
3.300000000000000

使用 Numpy 庫

Numpy 是 Python 中一個流行的庫,用於執行數值計算。該庫處理陣列,它們是類似列表的物件,唯一的區別是它們僅儲存同構資料型別。該庫還提供了一個名為 around 的方法,該方法接受數字陣列並返回截斷到指定數字的十進位制數。

示例

在以下程式碼中,我們首先在程式碼中匯入了 Numpy 庫。接下來,我們定義了函式 round_off,它接受引數 k 和 **kwargs(可變引數)。接下來,我們使用 list 方法將 kwargs 的所有值轉換為 list 資料型別。我們使用 around 方法查詢數字列表的四捨五入的十進位制數。我們將列表和十進位制作為引數傳遞給函式。最後,我們返回結果。

import numpy as np
def round_off(k, **kwargs):
    numbers = list(kwargs.values())
    rounded = np.around(numbers, decimals=k)  
    return rounded
k = 5
numbers = {'num1': 7.7486492653, 'num2': 5.634534534, 'num3': 64.345345345}
rounded_numbers = round_off(k, **numbers)
print(f"The numbers {numbers} rounded off to {k} decimal places are: {rounded_numbers}")

輸出

The numbers {'num1': 7.7486492653, 'num2': 5.634534534, 'num3': 64.345345345} rounded off to 5 decimal places are: [ 7.74865  5.63453 64.34535]

結論

在本文中,我們瞭解瞭如何在 Python 中使用 Python 中提供的幾種方法來查詢 k 位小數。我們使用了 round 方法,它非常方便使用。接下來,我們使用了字串格式化方法,它對於截斷而不是四捨五入十進位制數很有用。decimal 庫有助於減少十進位制數表示中的一些不一致性。另一方面,其他一些庫(如 Numpy)也允許我們對陣列狀物件中的十進位制數進行四捨五入。

更新於: 2023-07-18

158 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告