Profitați la maximum de numere cu zecimale

Unul dintre cele mai frecvent utilizate tipuri de date în Python este float, care reprezintă numere în virgulă mobilă. Numerele cu virgulă mobilă sunt numere, pozitive sau negative, care au o zecimală. Numerele în virgulă mobilă includ și numere reprezentate folosind notația științifică, cu caracterul e sau E folosit pentru a indica o putere de 10.

Float este un tip de date foarte important, deoarece poate reprezenta o gamă largă de numere reale, de la numere foarte mici la numere foarte mari.

Exemple de numere în virgulă mobilă în Python sunt prezentate mai jos:

# float numbers
a = 20.0
b = -51.51345
c = 65e7
d = -1.08E12
e = 2E10

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))

Ieșire:

<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>

În plus, ele permit calcule mai precise în comparație cu tipurile de date, cum ar fi numerele întregi, care elimină partea fracțională a numerelor. De exemplu, cu numere întregi, un număr precum 3,142 ar fi reprezentat simplu ca 3.

Cu toate acestea, tipul de date float ar reprezenta numărul real așa cum este, care este 3.142. Prin urmare, valorile float sunt mai potrivite pentru calcule matematice, deoarece produc rezultate mai precise.

În această privință, valorile în virgulă mobilă sunt utilizate pe scară largă în modelarea din lumea reală, învățarea automată, știința datelor, analiza financiară și economică, calculele matematice, grafica și vizualizările și calculele științifice și de inginerie.

Întregi vs. Float în Python

Numerele întregi sunt un alt tip de date foarte popular în Python. Spre deosebire de numerele cu virgulă mobilă, numerele întregi nu au virgulă zecimală. Numerele întregi sunt formate din numere întregi pozitive, numere negative și zero, toate care nu au o parte fracțională.

Numerele întregi sunt utile atunci când efectuăm operații care implică numere întregi, cum ar fi atunci când numărăm sau indexăm. În Python, valorile întregi sunt notate ca int.

Unele numere întregi sunt prezentate mai jos:

a = 0
b = 968
c = -14

print(type(a))
print(type(b))
print(type(c))

Ieșire:

<class 'int'>
<class 'int'>
<class 'int'>

Unele dintre diferențele dintre numere întregi și numere în virgulă mobilă în Python includ:

CaracteristicIntregi(int)Numere cu virgulă mobilă(float)ReprezintăNumere întregi, omologii lor negativi și zero, toate fără zecimală.Numere reale cu virgulă zecimală Precizie Precizie nelimitată, astfel încât nu există limită pentru cât de lungă sau mare poate fi o valoare int. Singura constrângere va fi memoria disponibilă în sistemul dumneavoastră. Au o precizie limitată. Cea mai mare valoare float pe care o puteți stoca este de aproximativ 1,8 x 10308. Utilizarea memoriei. Folosește mai puțină memorie decât valorile întregi. majoritatea operatiilor matematice

  Îmbunătățiți productivitatea în 10 moduri

Diferite moduri de a crea și de a utiliza flotă în Python

O modalitate ușoară de a începe să lucrați cu valorile float în Python este să atribuiți unei variabile o valoare float astfel:

# assign a variable a float value
a = 3.142

O altă modalitate de a obține valori flotante este să convertiți numerele întregi și șiruri numerice în valori flotante folosind constructorul float(). Dacă trecem un șir întreg sau numeric în float(), acesta va fi convertit într-o valoare float, așa cum se arată mai jos:

number1 = 2524
numString1 = "513.523"
numString2 = "1341"
# Convert to a float and store the float value in a variable
a = float(number1)
print(a)
b = float(numString1);
print(b)
c = float(numString2)
print(c)

Ieșire:

2524.0
513.523
1341.0

În exemplul de mai sus, întregul și șirurile de caractere sunt convertite în valoare float folosind float() și apoi stocate într-o variabilă, care este apoi tipărită, arătând valoarea float rezultată după conversie.

O altă modalitate de a obține valori flotante este prin efectuarea de calcule matematice, cum ar fi împărțirea, după cum se arată mai jos:

num1 = 20
num2 = 3
result = num1/num2
print("Result of the division as an integer:")
print(int(20/3))
print("Result of the division as a float value:")
print(result)
print(type(result))

Ieșire:

Result of the division as an integer:
6
Result of the division as a float value:
6.666666666666667
<class 'float'>

În exemplul de mai sus, observați că valoarea float ne oferă un răspuns mai precis în comparație cu împărțirea și obținerea înapoi a rezultatului ca număr întreg.

Când lucrați cu numere float în Python, este posibil să întâlniți rezultate foarte interesante din cauza modului în care valorile float sunt reprezentate intern în computer. Numerele în virgulă mobilă sunt reprezentate în hardware-ul computerului ca fracții de bază 2 (binare).

Cu toate acestea, majoritatea fracțiilor zecimale, în special cele cu zecimale recurente, nu pot fi reprezentate ca o fracție binară exactă. Ca rezultat, numerele în virgulă mobilă sunt de obicei stocate ca o aproximare a valorii reale.

Pentru a vedea acest lucru practic, luați în considerare valoarea float 0,3. Dacă atribuiți 0,3 unei variabile, în mod intern, aceasta nu va fi stocată exact ca 0,3. Pentru a vedea acest lucru, putem folosi funcția format() pentru a vedea cum este reprezentat intern 0.3. format() ne permite să afișăm un număr dorit de cifre semnificative ale unei valori cu care lucrăm. În exemplul de mai jos, tipărim 0,3 până la 20 de cifre semnificative pentru a vedea cum este stocat intern.

num = 0.3
print("num to 20 significant figures")
print(format(num, '.20f'))
print("Value we stored for num")
print(num)

Ieșire:

num to 20 significant figures
0.29999999999999998890
Value we stored for num
0.3

După cum puteți vedea, valoarea 0,3 pe care am atribuit-o unei variabile numite num, nu este stocată intern ca exact 0,3. Când imprimați variabila num, obțineți o valoare rotunjită.

  6 cei mai buni furnizori de găzduire de servere LEAP [2023]

Datorită acestui fapt, este posibil să obțineți rezultate neașteptate atunci când lucrați cu valori flotante. De exemplu, dacă trebuie să faceți un calcul manual de 0,3 + 0,3 + 0,3, răspunsul dvs. va fi 0,9. Cu toate acestea, conform lui Python, acesta nu este cazul, deoarece în interior, acesta stochează aproximări ale fracțiunilor binare ale valorii reale. Acest lucru poate fi văzut mai jos:

sum = 0.3 + 0.3 + 0.3
answer = 0.9
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Ieșire:

Is sum equal to answer: 
False
The internal representation of of sum is: 
0.8999999999999999
The answer from manual calculation is: 
0.9

Prin urmare, atunci când lucrați cu valori flotante, este important să rețineți că Python nu stochează valori exacte în interior. În schimb, stochează aproximări ale valorii reale.

Prin urmare, atunci când faceți comparații între valorile flotante, este posibil să doriți să rotunjiți mai întâi numărul la același număr de cifre semnificative. Pentru o mai mare precizie atunci când lucrați cu numere în virgulă mobilă în Python, luați în considerare utilizarea modulului zecimal încorporat.

Modulul zecimal în Python

În situațiile în care precizia ridicată este importantă și obligatorie, cum ar fi în calculele financiare și științifice, folosirea float nu este ideală. Pentru a garanta o precizie ridicată atunci când lucrați cu numere în virgulă mobilă, se utilizează modulul zecimal Python încorporat.

Spre deosebire de float care este stocat ca reprezentări binare în virgulă mobilă care sunt dependente de mașină, modulul zecimal stochează numere în virgulă mobilă folosind reprezentarea bazată pe zecimală independentă de mașină, care oferă o precizie mai mare.

În plus, modulul zecimal este capabil să reprezinte numere zecimale exact așa cum sunt și să le folosească exact așa cum sunt în calcule. De asemenea, oferă aritmetică zecimală cu virgulă mobilă rotunjită corect.

Pentru a începe să utilizați modulul zecimal, importați-l în fișierul dvs. Python, după cum urmează:

import decimal

Pentru a vedea beneficiul modulului zecimal, să refacem comparația anterioară între suma 0,3 + 0,3 + 0,3 și valoarea 0,9. Codul pentru a face acest lucru este prezentat mai jos:

import decimal

sum = decimal.Decimal('0.3') + decimal.Decimal('0.3') + decimal.Decimal('0.3')
answer = decimal.Decimal('0.9')
print("Is sum equal to answer: ")
print(sum == answer)
print("The internal representation of sum is: ")
print(sum)
print("The answer from manual calculation is: ")
print(answer)

Ieșire:

Is sum equal to answer: 
True
The internal representation of sum is: 
0.9
The answer from manual calculation is: 
0.9

Prin urmare, atunci când lucrați cu numere în virgulă mobilă și aveți nevoie de o precizie ridicată, nu uitați să utilizați întotdeauna modulul zecimal.

  Cum să utilizați funcția de traducere online din Outlook

Erori frecvente atunci când lucrați cu plutitoare

Multe dintre erorile care apar atunci când lucrați cu Float în Python provin din neînțelegerea modului în care numerele în virgulă mobilă sunt reprezentate intern de Python. De exemplu, o valoare precum 0,3 nu va fi stocată exact ca 0,3. Prin urmare, este posibil să întâlniți erori dacă lucrați cu valori flotante, presupunând că acestea sunt stocate exact așa cum sunt.

O eroare comună este eroarea de rotunjire pe care o veți întâmpina atunci când efectuați calcule matematice pe valori flotante. Deoarece Python nu poate reprezenta valorile flotante reale, este posibil să întâmpinați erori de rotunjire în care rezultatele pot să nu fie cele așteptate.

Din cauza erorilor, cum ar fi erorile de rotunjire, este posibil să întâlniți erori atunci când încercați să faceți comparații de egalitate între valorile în virgulă mobilă. Fiți foarte precauți atunci când lucrați cu float în Python și fiți conștient de rezultatele neașteptate.

O modalitate mai bună de a evita toate erorile care pot apărea pe măsură ce lucrați cu valori flotante este să utilizați modulul zecimal încorporat. În acest fel, rezultatele calculelor cu virgulă mobilă vor fi mai previzibile și mai precise.

Concluzie

În calitate de programator care lucrează cu Python, sunteți obligat să utilizați tipul de date float. Pentru a evita erorile cu acest tip de date, este important să înțelegeți modul în care Python reprezintă numerele flotante în interior. Deoarece Python nu poate stoca numerele float reale, evitați să faceți comparații exacte de egalitate cu valorile float. În caz contrar, vei întâlni erori.

În cazul în care aveți nevoie de rezultate precise în aplicația dvs., evitați utilizarea valorilor flotante. În schimb, utilizați modulul zecimal încorporat, care oferă rezultate precise în virgulă mobilă și le reprezintă exact așa cum sunt și într-o manieră independentă de mașină.

Puteți citi, de asemenea, Python Itertools Functions și Python Try Except.