Cum să rotunjiți numerele în Python [With Examples]

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.

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.

  15 cele mai bune instrumente de monitorizare a rețelei puse la încercare în 2020

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:

  Introducere în Platforma de marketing omnicanal pentru IMM-uri

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.
  Ar trebui să utilizați brelocul iCloud pentru a sincroniza parolele pe Mac și iPhone?

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!