Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah anda telah mempelajari dua kaedah pembundaran dalam Python?
Dalam kebanyakan kes, kami akan menggunakan bulat untuk mengekalkan perpuluhan, tetapi ini tidak mematuhi peraturan dalam pengetahuan matematik kami.
round(number[, ndigits])
round() membundarkan nombor (biasanya nombor titik terapung) mengikut peraturan berikut (Python3):
Mari kita bincangkan dahulu tentang kes di mana digit bukan 0:
Jika digit terakhir digit rizab adalah kurang daripada atau sama dengan 4, maka buangkannya, seperti bulat(5.214,2) = 5.21
Jika digit terakhir digit rizab adalah sama dengan 5, dan tiada nombor selepas digit, Maka tiada bawa, seperti bulat(5.215,2) = 5.21
Jika digit terakhir digit simpanan itu bersamaan dengan 5, dan terdapat nombor selepas digit, kemudian bawa dibawa, seperti bulat(5.2151,2) = 5.22
Jika digit terakhir digit rizab lebih besar daripada atau sama dengan 6, bawa. Sebagai contoh, bulat(5.216,2) = 5.22
>>> round(5.214,2) 5.21 >>> round(5.215,2) 5.21 >>> round(5.2151,2) 5.22 >>> round(5.216,2) 5.22 >>>
Tetapi terdapat pengecualian kepada peraturan 2 di atas, seperti:
>>> round(0.645,2) 0.65 >>>
Sebabnya nombor titik terapung hanya boleh mewakili nilai anggaran Apabila dinyatakan dalam binari. Walaupun yang kita lihat ialah 0.645 Sebenarnya, Python menyimpan 0.64500000000000017763568394002504646778106689453125 mengikut standard IEE.
Mari kita bincangkan tentang kes di mana digit ialah 0 atau Tiada:
Jika digit terakhir digit simpanan adalah kurang daripada atau sama dengan 4, ia akan dibuang, seperti bulat(1.4 ) = 1
Jika digit terakhir digit simpanan adalah sama dengan 5 dan tiada nombor selepasnya, nombor genap terdekat diambil, seperti bulat(1.5)=2, bulat(2.5)= 2
Jika digit terakhir digit simpanan ialah Bit adalah sama dengan 5, dan terdapat digit selepasnya, maka digit berhampiran digunakan, seperti bulat(2.51)=3
Jika digit terakhir digit rizab lebih besar daripada atau sama dengan 6, ia dibawa. Sebagai contoh, bulat(1.6) = 2
>>> round(1.5) 2 >>> round(1.4) 1 >>> round(1.6) 2 >>> round(2.5) 2 >>> round(2.51) 3 >>>
Sila ambil perhatian bahawa hasil yang dikekalkan bagi rentetan f adalah konsisten dengan pusingan:
>>> f"{1.5:.0f}" '2' >>> f"{2.5:.0f}" '2' >>> f"{2.51:.0f}" '3'
Jadi bagaimana untuk mendapatkan kaedah yang konsisten dengan peraturan pembundaran matematik? Sila gunakan kaedah dua:
Kaedah ini mempunyai prasyarat, iaitu perpuluhan mesti ditukar kepada rentetan terlebih dahulu, supaya nombor titik terapung dapat diwakili dengan tepat. .
import decimal # 修改舍入方式为四舍五入 decimal.getcontext().rounding = "ROUND_HALF_UP" x = "0.645" x1 = decimal.Decimal(x).quantize(decimal.Decimal("0.00")) print(f"{x} 的近似值为 {x1}") y = "2.5" y1 = decimal.Decimal(y).quantize(decimal.Decimal("0")) print(f"{y} 的近似值为 {y1}")
Keluaran program di atas adalah seperti berikut:
0.645 的近似值为 0.65 2.5 的近似值为 3
Patuhi pembundaran matematik kami.
Nombor titik terapung hanya boleh mewakili nilai anggaran dalam kaedah perwakilan binari Untuk perkara ini, anda boleh menyemak dokumen [1]. Selepas memahami perwakilan nombor titik terapung, ia tidak akan berasa pelik apabila anda melihat pembundaran.
[1] Dokumentasi: https://docs.python.org/3/tutorial/floatingpoint.html#tut-fp-issues
Atas ialah kandungan terperinci Adakah anda telah mempelajari dua kaedah pembundaran dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!