Te confrunți cu date numerice în Python? Îmbunătățește-ți abilitățile învățând diversele metode de rotunjire a numerelor în Python.
Majoritatea seturilor de date reale conțin atât caracteristici numerice, cât și categorice. Există o gamă largă de tipuri de date numerice, de la date de la senzori, rate de schimb valutar, până la semnale biomedicale și multe altele.
Când lucrezi cu date numerice, s-ar putea să fie necesar să rotunjești aceste valori la o anumită precizie, din motive precum:
- Asigurarea unui format uniform
- Stocare și procesare simplificată
În acest ghid, vom explora diferitele tehnici de rotunjire a unui număr la o precizie specifică, precum și cum să rotunjim numerele în sus sau în jos la cel mai apropiat întreg și altele.
Să începem explorarea.
Metode de rotunjire folosind funcția `round()`
Cea mai obișnuită modalitate de a rotunji numere în Python este prin folosirea funcției încorporate `round()`. Să începem cu sintaxa acesteia:
round(num, ndigits)
Unde:
- `num` este numărul pe care dorim să-l rotunjim.
- `ndigits` este un parametru opțional, implicit având valoarea `None`. Reprezintă numărul de cifre la care numărul este rotunjit. Dacă `ndigits = 2`, numărul este rotunjit la două zecimale.
- Funcția `round()` returnează numărul rotunjit la precizia definită de `ndigits`.
Exemple de utilizare a funcției `round()`
Să analizăm câteva exemple practice pentru a înțelege modul în care funcționează funcția `round()`.
După cum am menționat, parametrul `ndigits` este opțional. Prin urmare, când apelăm `round()` doar cu numărul, acesta este rotunjit la cel mai apropiat număr întreg.
number = 7.123456 rounded = round(number) print(rounded) # Rezultat: 7
Acum, haide să analizăm câteva cazuri în care specificăm precizia.
Cu `ndigits` setat la 2, numărul este rotunjit la două zecimale (locul zecimilor):
number = 7.123456 rounded = round(number, 2) print(rounded) # Rezultat: 7.12
Cu `ndigits` setat la 3, numărul este rotunjit la trei zecimale (locul sutimilor):
number = 7.123456 rounded = round(number, 3) print(rounded) # Rezultat: 7.123
Funcția `round()` poate fi utilizată și pentru a rotunji numere negative:
number = -3.4 rounded = round(number) print(rounded) # Rezultat: -3
În acest caz, funcția rotunjește de la -3.4 la -3, cel mai apropiat număr întreg.
Rotunjirea la zeci și sute
Știai că parametrul `ndigits` poate lua și valori negative?
Într-adevăr, poți apela funcția `round()` cu valori negative pentru `ndigits`. În acest caz, rotunjirea se face în stânga virgulei zecimale în loc de dreapta.
Ce înseamnă asta? Să analizăm câteva exemple.
Când setăm `ndigits` la -1, numărul este rotunjit la cea mai apropiată zece.
number = 7.123456 rounded = round(number, -1) print(rounded) # Rezultat: 10.0
Iar când apelăm funcția `round()` cu `ndigits` setat la -2, numărul 77.123456 este rotunjit la cea mai apropiată sută, care în acest caz este 100.0.
number = 77.123456 rounded = round(number, -2) print(rounded) # Rezultat: 100.0
Până acum, funcția `round()` pare să respecte principiile de rotunjire învățate la școală. Dar nu este întotdeauna cazul.
Există anumite limitări ale numerelor în virgulă mobilă. Prin urmare, este posibil să observi rezultate neașteptate la rotunjire. Un alt aspect important este rotunjirea bancherului.
Ce este rotunjirea bancherului?
Deschide un Python REPL și încearcă următorul exemplu:
>>> round(1.5) 2
Observăm că `round(1.5)` returnează 2 (conform așteptărilor). Dar ce ar trebui să returneze `round(2.5)`?
>>> round(2.5) 2
Interesant, nu-i așa? Atât `round(1.5)`, cât și `round(2.5)` returnează 2. Dar cum și de ce?
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 strategia „jumătate rotunjită la par”.
Știm că funcția `round()` este adecvată pentru operații simple de rotunjire. Totuși, uneori, este posibil să fie necesară rotunjirea unui număr în sus sau în jos la cel mai apropiat număr întreg.
Cum se face acest lucru? Să învățăm în secțiunea următoare.
Cum rotunjim numere în sus în Python
Pentru a rotunji un număr în sus la cel mai apropiat întreg, poți utiliza:
Utilizarea `math.ceil`
Funcția `ceil()` (sau funcția plafon) rotunjește un număr la cel mai mic număr întreg care este mai mare decât numărul dat.

Următorul fragment de cod arată cum se utilizează funcția `ceil()` pentru a rotunji numărul 3.2:
import math number = 3.2 rounded_up = math.ceil(number) print(rounded_up) # Rezultat: 4
Utilizarea modulului `decimal`
Până acum, am folosit tipul de date float încorporat. Totuși, pentru unele aplicații din calcule științifice și finanțe, este necesară o precizie mai mare. Pentru aceasta, Python oferă modulul `decimal`, care oferă:
- Aritmetică în virgulă mobilă mai precisă.
- Teste de egalitate mai fiabile.
- Control mai bun asupra nivelului de precizie (precizia implicită este de 28 de zecimale).
Pentru a vizualiza contextul curent, utilizează `getcontext()` după cum se arată:
from decimal import getcontext current_context = getcontext() print(current_context)
Ar trebui să poți observa modul curent de precizie și rotunjire, printre altele:
# Rezultat 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, poț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)
# Rezultat: 4
În acest caz, numărul 3.2 a fost rotunjit la cel mai apropiat întreg superior, adică 4.
Cum rotunjim numerele în jos în Python
Acum, să analizăm cum putem rotunji numerele în jos în Python. Similar cu procesul de rotunjire în sus, putem folosi modulele `math` sau `decimal`.
Utilizarea `math.floor`
Funcția `floor()` din modulul `math` face următoarele: rotunjește un număr la cel mai mare număr întreg care este mai mic decât numărul dat.

Să luăm următorul exemplu:
import math number = 3.8 rounded_down = math.floor(number) print(rounded_down) # Rezultat: 3
În acest caz, funcția `floor()` rotunjește numărul cu virgulă mobilă 3.8 în jos la 3.
Utilizarea modulului `decimal`
Pentru a rotunji un număr în jos, poț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)
# Rezultat: 3
După cum se vede, 3.8 a fost rotunjit în jos la 3.
Capcane comune de evitat la rotunjirea numerelor
Am observat deja că funcția `round()` rotunjește la par, ceea ce poate fi nedorit în unele cazuri. Există și alte capcane comune de evitat la rotunjirea numerelor în Python:
- Comparația incorectă a egalității: rotunjirea numerelor introduce deseori erori de rotunjire. Dacă încerci să faci o comparație de egalitate între un rezultat rotunjit și o altă valoare, verificarea egalității va eșua (aproape întotdeauna) din cauza preciziei diferite. Prin urmare, încearcă să eviți verificările de egalitate între numerele cu virgulă mobilă și numerele rotunjite. Dacă este necesară o comparație, introdu o toleranță.
- Pierderea de informații: s-ar putea să fie necesar ca anumite date, cum ar fi citirile senzorilor la diferite momente, să fie capturate cu o precizie ridicată. Rotunjirea acestor date la mai puține zecimale duce la pierderea de informații și o analiză incorectă.
- Rotunjirea rezultatelor intermediare: deseori, un calcul implică mai mulți pași. Menține o precizie constantă în toți pașii. Evită rotunjirea la pașii intermediari pentru a preveni acumularea erorilor de rotunjire.
Cele mai bune practici pentru rotunjirea numerelor în Python
Să enumerăm câteva dintre cele mai bune practici de urmat la rotunjirea numerelor în Python:
- Alege tipul de date potrivit: optează pentru tipurile de date float sau decimal, în funcție de scop. Dacă trebuie să realizezi operații aritmetice cu virgulă mobilă de înaltă precizie, alege tipul de date `decimal`.
- Utilizează niveluri de precizie consecvente: setează niveluri de precizie consecvente pentru numerele zecimale în întregul program, pentru a evita erorile neașteptate de rotunjire.
- Documentează tehnicile de rotunjire: în aplicații reale care implică date precum valute și date de la senzori, este important să utilizezi o tehnică de rotunjire consecventă și documentată.
Încheiere
Să rezumăm rapid ce am învățat în acest tutorial:
- Poți folosi funcția încorporată `round()` cu sintaxa `round(num, ndigits)`. Când utilizezi funcția `round()`, fii conștient de strategia de rotunjire a bancherului, care rotunjește numerele situate exact la mijlocul distanței dintre două numere întregi la cel mai apropiat număr par.
- Poți folosi funcțiile `ceil()` și `floor()` din modulul `math` pentru a rotunji în sus, respectiv în jos, un anumit număr la cel mai apropiat întreg.
- Când trebuie să efectuezi aritmetică cu virgulă mobilă de înaltă precizie, folosește modulul `decimal`. Poți rotunji numerele cu precizia și strategia de rotunjire dorite.
- Trebuie să fii conștient de capcanele comune legate de rotunjirea numerelor în Python. Acestea includ pierderea de informații datorită rotunjirii, rotunjirea rezultatelor la pașii intermediari și utilizarea unor precizii diferite în diferite secțiuni ale codului.
- Cele mai bune practici includ alegerea tipului de date adecvat scopului, în funcție de aplicație, și documentarea nivelurilor de precizie consecvente.
În continuare, descoperă cum să efectuezi împărțirea cu rest în Python.
A fost util acest articol?
Îți mulțumim pentru feedback!