Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh memotong nilai apungan dalam Python tanpa membulatkan hasilnya?

Bagaimanakah saya boleh memotong nilai apungan dalam Python tanpa membulatkan hasilnya?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 00:03:02934semak imbas

How can I truncate a float value in Python without rounding the result?

Bagaimana untuk memotong nilai apungan tanpa pembundaran?

Untuk mengalih keluar digit daripada apungan dan mempunyai nombor digit tetap selepas titik perpuluhan, seperti menukar 1.923328437452 kepada 1.923 , anda boleh menggunakan fungsi berikut:

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

Fungsi ini mencapai pemotongan dengan menukar apungan kepada rentetan, membahagikannya kepada integer, titik perpuluhan dan komponen digit perpuluhan, dan kemudian menggabungkannya semula dengan nombor yang dikehendaki daripada digit perpuluhan. Jika terapung terlalu besar atau kecil untuk diwakili tanpa tatatanda eksponen, ia mula-mula ditukar kepada format itu.

Nota: Fungsi ini serasi dengan Python 2.7 dan 3.1 . Untuk versi terdahulu, penyelesaian yang kurang tepat yang melibatkan pembundaran kepada 12 tempat perpuluhan sebelum pemangkasan boleh digunakan.

Memahami Kaedah

Untuk memahami kaedah di sebalik fungsi pemangkasan, adalah penting untuk mengenali bahawa nombor titik terapung disimpan dalam memori komputer sebagai perwakilan binari, yang mungkin tidak selalu sepadan dengan perwakilan perpuluhan tepat yang dimaksudkan. Sebagai contoh, kedua-dua 0.3 dan 0.29999999999999998 disimpan menggunakan perwakilan binari yang sama.

Untuk menyelesaikan kekaburan ini, fungsi ini menggunakan algoritma yang canggih untuk memilih perwakilan perpuluhan "terbaik" untuk pemotongan. Ini dicapai dengan menukar apungan kepada rentetan menggunakan operasi pemformatan rentetan lalai, yang meniru spesifikasi format "g" dan secara automatik memilih perwakilan terbaik.

Walau bagaimanapun, terdapat kes kelebihan tertentu di mana kaedah ini boleh menghasilkan dalam "positif palsu," di mana nombor yang tidak sepatutnya dibundarkan adalah. Dalam kes ini, penentuan ketepatan tetap sebelum pemangkasan mungkin diperlukan.

Nota Tambahan

Pemotongan apungan tanpa pembundaran adalah penting apabila berurusan dengan nilai titik terapung yang sangat spesifik yang sengaja hampir dengan bulat nombor tetapi tidak sama dengan mereka. Untuk kebanyakan aplikasi praktikal, pembundaran biasanya mencukupi.

Fungsi yang dibentangkan di sini juga mengabaikan digit yang hilang semasa pemotongan, yang berbeza daripada pembundaran, yang melaraskan baki digit. Pendekatan ini memastikan bahawa nilai yang dipotong mengekalkan ketepatan asalnya pada tempat perpuluhan yang ditentukan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memotong nilai apungan dalam Python tanpa membulatkan hasilnya?. 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