Lucrezi cu tipuri de date numerice în Python? Treceți de nivel învățând diferitele modalități de rotunjire a numerelor în Python.
Majoritatea setului de date din lumea reală conține caracteristici numerice și categoriale. Există o gamă largă de caracteristici numerice, de la citiri ale senzorilor la rate de schimb valutar, semnale biomedicale și multe altele.
Când lucrați cu valori numerice, poate fi necesar să rotunjiți aceste valori la o precizie fixă din motive precum:
- Asigurarea unui format consistent
- Depozitare și procesare mai ușoară
În acest tutorial, vom învăța diferitele moduri de a rotunji un număr la o anumită precizie, de a rotunji în sus și în jos numerele la cel mai apropiat număr întreg și multe altele.
Să începem.
Cuprins
Cum să rotunjiți numerele folosind funcția round() încorporată
Cea mai comună metodă de rotunjire a numerelor în Python este utilizarea încorporată funcția round().. Să începem prin a-i învăța sintaxa:
round(num, ndigits)
Aici,
- num este numărul pe care doriți să-l rotunjiți
- ndigits este un parametru opțional cu o valoare implicită None. Este numărul de locuri la care se rotunjește numărul. Dacă ndigits = 2, num este rotunjit la două locuri după virgulă zecimală.
- Funcția round() returnează num rotunjit la precizia ncifre după virgulă zecimală.
Exemple de utilizare a funcției Python round().
Să codificăm câteva exemple pentru a înțelege cum funcționează funcția round().
După cum sa menționat, ndigits este opțional. Deci, atunci când apelăm round() doar cu numărul, numărul este rotunjit la cel mai apropiat număr întreg.
number = 7.123456 rounded = round(number) print(rounded) # Output: 7
Acum să luăm câteva exemple în care specificăm precizia.
Cu ndigits setate la 2, numărul este rotunjit la două zecimale (locul al zecelea):
number = 7.123456 rounded = round(number, 2) print(rounded) # Output: 7.12
Cu ndigits setate la 3, numărul este rotunjit la trei zecimale (locul al sutelea):
number = 7.123456 rounded = round(number, 3) print(rounded) # Output: 7.123
Puteți folosi round() pentru a rotunji și numerele negative:
number = -3.4 rounded = round(number) print(rounded) # Output: -3
Aici, funcția rotunjește de la -3,4 la -3, cel mai apropiat număr întreg.
Rotunjirea la cel mai apropiat loc de zeci și sute
Știați că ndigits pot lua și valori negative?
Da, puteți apela funcția round() cu valori negative pentru ndigits. Când faceți acest lucru, rotunjirea are loc la stânga punctului zecimal în loc de la dreapta.
Ce înseamnă acest lucru? Să vedem câteva exemple.
Când setăm ndigits la -1, numărul este rotunjit la cel mai apropiat loc al zecilor.
number = 7.123456 rounded = round(number, -1) print(rounded) # Output: 10.0
Și apelarea funcției round() cu ndigits setate la -2 rotunjește numărul 77.123456 la cea mai apropiată sută, care în acest caz este 100.0.
number = 77.123456 rounded = round(number, -2) print(rounded) # Output: 100.0
Până acum, funcția round() pare să urmeze principiile generale de rotunjire pe care le-am învățat la matematica școlii. Dar nu este întotdeauna cazul.
Sunt cateva limitări cu virgulă mobilă numere. Deci, este posibil să vedeți niște rezultate neașteptate la rotunjire. Un alt avertisment interesant este rotunjirea bancherului.
Ce este rotunjirea bancherului?
Porniți un Python REPL și încercați următorul exemplu:
>>> round(1.5) 2
Vedem că round(1.5) returnează 2 (cum era de așteptat). Deci, ce ar trebui să returneze runda (2.5)?
>>> round(2.5) 2
Interesant, da? Atât round(1.5) cât și round(2.5) returnează 2. Dar cum și de ce?
Pe plan intern, funcția de rotunjire funcționează astfel: orice valoare care se află la jumătatea distanței dintre două numere întregi este rotunjită la cel mai apropiat număr întreg par. Aceasta se numește rotunjirea bancherului sau jumătatea rotundă la strategie egală.
Știm că funcția round() este suficientă pentru sarcini simple de rotunjire. Dar uneori, poate fi necesar să rotunjiți în sus sau în jos un număr la cel mai apropiat număr întreg.
Deci cum faci asta? Să învățăm asta în secțiunea următoare.
Cum să rotunjiți numerele în Python
Pentru a rotunji un număr la cel mai apropiat număr întreg, puteți utiliza:
- Funcția ceil() din matematica modul sau
- The zecimal modul
Folosind math.ceil
Funcția ceil() (sau funcția plafon) funcționează astfel: rotunjește un număr la cel mai mic număr întreg care este mai mare decât numărul.
Următorul fragment arată cum să utilizați funcția ceil() pentru a rotunji numărul 3.2:
import math number = 3.2 rounded_up = math.ceil(number) print(rounded_up) # Output: 4
Folosind modulul zecimal
Până acum, am folosit tipul de date flotant încorporat. Dar pentru anumite aplicații în calculul științific și finanțe, avem nevoie de o precizie mult mai mare. Și pentru aceasta, Python este livrat cu modulul zecimal care oferă:
- Aritmetică mai precisă în virgulă mobilă
- Testare de încredere de egalitate
- Control mai fin asupra nivelului de precizie (precizia implicită este de 28 de locuri)
Pentru a vedea contextul curent, folosind getcontext() după cum se arată:
from decimal import getcontext current_context = getcontext() print(current_context)
Ar trebui să puteți vedea modul actual de precizie și rotunjire, printre altele:
# Output Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
Pentru a rotunji un număr, puteți utiliza quantize() specificând:
- Precizia (0,0 deoarece dorim să rotunjim la cel mai apropiat număr întreg) și
- Modul de rotunjire: ROUND_CEILING
from decimal import Decimal, ROUND_CEILING number = Decimal('3.2') rounded_up = number.quantize(Decimal('0'), rounding=ROUND_CEILING) print(rounded_up) # Output: 4
Aici, numărul 3.2 a fost rotunjit la cel mai apropiat număr întreg 4.
Cum să rotunjiți numerele în jos în Python
Acum, să vedem cum să rotunjim numerele în jos în Python. Similar cu procesul de rotunjire, putem folosi fie modulele matematice, fie modulele zecimale.
Folosind math.floor
Funcția floor() din modulul de matematică funcționează astfel: rotunjește un număr la cel mai mare număr întreg care este mai mic decât numărul.
Să luăm următorul exemplu:
import math number = 3.8 rounded_down = math.floor(number) print(rounded_down) # Output: 3
Aici, funcția floor() rotunjește în jos numărul în virgulă mobilă de la 3,8 la 3.
Folosind modulul zecimal
Pentru a rotunji un număr în jos, puteți utiliza quantize() setând modul de rotunjire la ROUND_FLOOR.
from decimal import Decimal, ROUND_FLOOR number = Decimal('3.8') rounded_down = number.quantize(Decimal('0'), rounding=ROUND_FLOOR) print(rounded_down) # Output: 3
După cum s-a văzut, 3,8 a fost rotunjit la 3.
Capcanele comune de evitat la rotunjirea numerelor
Am văzut deja că funcția round() rotunjește jumătate la par, ceea ce s-ar putea să nu fie întotdeauna dorit. Există și alte capcane comune de evitat atunci când rotunjiți numerele în Python:
- Comparație incorectă a egalității: numerele de rotunjire introduc adesea erori de rotunjire. Dacă încercați să efectuați o comparație de egalitate între un rezultat rotunjit cu o altă valoare, verificarea egalității va eșua (aproape întotdeauna) din cauza preciziei diferite. Deci, încercați să evitați verificările de egalitate între numerele în virgulă mobilă și numerele rotunjite în virgulă mobilă. Dacă comparația este necesară, atunci introduceți un prag de toleranță.
- Pierderea de informații: este posibil să doriți ca anumite date, cum ar fi citirile senzorului, la diferite marcaje temporale, să fie capturate cu precizie ridicată. Rotunjirea acestor date la mai puține zecimale are ca rezultat pierderea de informații și o analiză incorectă.
- Rotunjirea rezultatelor intermediare: veți avea adesea mai mulți pași ca parte a calculului. Folosiți o precizie constantă în toți pașii. De asemenea, evitați rotunjirea la pașii intermediari pentru a preveni agravarea erorilor de rotunjire.
Cele mai bune practici pentru rotunjirea numerelor în Python
Să enumerăm câteva dintre cele mai bune practici de urmat atunci când rotunjim numerele în Python:
- Alegeți tipul de date potrivit: alegeți între tipurile de date flotante și zecimale, în funcție de aplicație. Dacă trebuie să efectuați aritmetică cu virgulă mobilă de înaltă precizie, alegeți tipul de date zecimal.
- Utilizați niveluri de precizie consecvente: setați niveluri de precizie consecvente pentru numerele zecimale pe tot parcursul programului pentru a evita erorile neașteptate de rotunjire.
- Tehnici de rotunjire a documentelor: în aplicațiile din lumea reală care implică date precum valută și citiri ale senzorului, este important să existe o tehnică de rotunjire consecventă și documentată.
Încheierea
Să încheiem tutorialul cu o revizuire rapidă a ceea ce am învățat:
- Puteți utiliza funcția încorporată round() cu această sintaxă round(num, ndigits). Când utilizați funcția round(), ar trebui să fiți conștienți de strategia de rotunjire a bancherului. Deci, rotunjește numerele exact între două numere întregi la cel mai apropiat număr întreg par.
- Puteți utiliza funcțiile ceil() și floor() din modulul de matematică pentru a rotunji în sus și respectiv în jos un anumit număr la cel mai apropiat număr întreg.
- Când trebuie să efectuați aritmetică în virgulă mobilă de înaltă precizie, utilizați modulul zecimal. Puteți rotunji numerele cu precizia și strategia de rotunjire necesare.
- Ar trebui să fiți conștienți de capcanele comune legate de rotunjirea numerelor în Python. Acestea includ pierderea de informații din rotunjire, rotunjirea rezultatelor la pași intermediari și utilizarea unei precizii diferite în diferite părți ale codului.
- Cele mai bune practici includ alegerea tipului de date potrivit în funcție de aplicație și documentarea nivelurilor de precizie consistente.
Apoi, aflați cum să efectuați împărțirea podelei în Python.
A fost de ajutor articolul?
Multumim pentru feedback-ul dvs!