在 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 及更高版本提供的預設字串格式化操作。此操作會智慧地選擇浮點數最接近的十進位表示形式,而不進行舍入。
如果您使用的是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中文網其他相關文章!