Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memotong Nilai Terapung dalam Python Tanpa Pembundaran?

Bagaimana untuk Memotong Nilai Terapung dalam Python Tanpa Pembundaran?

Susan Sarandon
Susan Sarandonasal
2024-11-05 19:51:02670semak imbas

How to Truncate Float Values in Python Without Rounding?

Bagaimanakah Truncate Float Values ​​Tanpa Pembundaran?

Pemotongan nilai apungan kepada nombor tertentu tempat perpuluhan, tanpa pembundaran, boleh dicapai dalam Python menggunakan 'truncate( )' fungsi. Fungsi ini mengambil dua hujah: nilai apungan untuk dipotong dan bilangan tempat perpuluhan untuk dikekalkan. Berikut ialah pelaksanaan fungsi yang menggunakan pembundaran pintar:

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]])

Penjelasan

Fungsi menukar apungan kepada rentetan, memastikan ketepatan penuh dipelihara. Ia kemudian membahagikan rentetan kepada tiga bahagian: bahagian integer, titik perpuluhan dan digit perpuluhan. Ia mengekalkan digit perpuluhan, mengalas dengan sifar jika perlu dan menggabungkan semula bahagian untuk membentuk rentetan terpotong.

Pembundaran Pintar

Dalam kes tertentu, tidak mungkin untuk mewakili apungan dalam perpuluhan dengan tepat tatatanda. Sebagai contoh, 0.3 tepat, boleh diwakili dengan tepat sebagai apungan IEEE tetapi bukan sebagai perpuluhan. Dalam kes sedemikian, fungsi menggunakan operasi pemformatan rentetan lalai yang disediakan oleh Python 2.7 dan lebih tinggi. Operasi ini bijak memilih perwakilan perpuluhan terdekat apungan, tanpa pembundaran.

Kaedah Alternatif untuk Versi Python Lama

Jika anda menggunakan versi Python lebih awal daripada 2.7 atau 3.0, anda boleh memotong apungkan dan bulatkannya kepada sejumlah besar tempat perpuluhan (mis., 12) sebelum memformatkan hasil sebagai rentetan. Pendekatan ini kurang tepat tetapi berfungsi dengan baik dalam kebanyakan kes:

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]])

Kaveat

Perhatikan bahawa pembundaran pintar mungkin menghasilkan positif palsu, di mana nombor dibundarkan yang tidak dimaksudkan. Untuk mengelakkan ini, ketepatan tetap boleh digunakan. Selain itu, versi Python terdahulu mungkin menghasilkan perwakilan perpuluhan yang tidak tepat. Dalam kes sedemikian, menggunakan penyelesaian 12 digit adalah disyorkan.

Atas ialah kandungan terperinci Bagaimana untuk Memotong Nilai Terapung dalam Python Tanpa Pembundaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn