首頁  >  文章  >  後端開發  >  如何在Python中截斷浮點數值而不進行四捨五入?

如何在Python中截斷浮點數值而不進行四捨五入?

Susan Sarandon
Susan Sarandon原創
2024-11-05 19:51:02663瀏覽

How to Truncate Float Values in Python Without Rounding?

如何在不進行四捨五入的情況下截斷浮點數值?

在 Python 中可以使用 'truncate( )' 功能。此函數有兩個參數:要截斷的浮點數值和要保留的小數位數。以下是使用智能捨入的函數實現:

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '{}'.format(f)
    if 'e' in s or 'E' in s:
        return '{0:.{1}f}'.format(f, n)
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])

說明

此函數將浮點數轉換為字串,確保保留完整精度。然後它將字串分為三個部分:整數部分、小數點和小數部分。它保留小數位,必要時用零填充,然後重新連接各部分以形成截斷的字串。

智能捨入

在某些情況下,無法精確地用十進位表示浮點數符號。例如,精確的 0.3 可以準確地表示為 IEEE 浮點數,但不能表示為小數。在這種情況下,函數使用 Python 2.7 及更高版本提供的預設字串格式化操作。此操作會智慧地選擇浮點數最接近的十進位表示形式,而不進行舍入。

舊Python 版本的替代方法

如果您使用的是2.7 或3.0 之前的Python 版本,您可以截斷在將結果格式化為字串之前,將其浮動並四捨五入到大量小數位(例如12)。這種方法不太精確,但在大多數情況下效果很好:

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '%.12f' % f
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])

注意事項

請注意,智能捨入可能會產生誤報,即數字被捨入而不是預期的結果。為了避免這種情況,可以使用固定精度。此外,早期的 Python 版本可能會產生不準確的十進位表示形式。在這種情況下,建議使用 12 位數字解決方法。

以上是如何在Python中截斷浮點數值而不進行四捨五入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn