Bagaimana untuk Memotong Nilai Terapung dalam Python Tanpa Pembundaran?

Susan Sarandon
Lepaskan: 2024-11-05 19:51:02
asal
662 orang telah melayarinya

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]])
Salin selepas log masuk

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]])
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!