Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah anda telah mempelajari dua kaedah pembundaran dalam Python?

Adakah anda telah mempelajari dua kaedah pembundaran dalam Python?

PHPz
PHPzke hadapan
2023-05-02 13:25:063562semak imbas

1. Gunakan bulat

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:

2 Gunakan Perpuluhan

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.

Perkataan akhir

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.

Rujukan

[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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam