Conversia șir de caractere de numere str în număr int, float în Python

Afaceri

Dacă doriți să convertiți un șir de numere în valori numerice în Python, utilizați int() pentru a converti în numere întregi și float() pentru a converti în numere cu virgulă mobilă.

Următoarele aspecte sunt explicate aici, împreună cu un exemplu de cod.

  • Utilizare de bază
    • Conversia șirurilor numerice în numere întregi:int()
    • Conversia unui șir de numere în numere cu virgulă mobilă:float()
  • Utilizare specială
    • Convertește șirurile de caractere în notație binară, octală și hexazecimală în numere
    • Convertește șirurile de caractere în notație exponențială în valori numerice
    • Conversia șirurilor de cifre arabe pe toată lățimea în numere
    • Conversia unui șir de caractere chinezești în numere

Pentru a converti o valoare numerică într-un șir de caractere, utilizați str().

Dacă doriți să convertiți numere sau șiruri de caractere în diferite formate, utilizați funcția format() sau metoda string str.format(). Apoi, puteți converti în notație 0, binară, octală, hexazecimală, exponențială etc. Pentru detalii, consultați următorul articol.

De asemenea, poate converti o listă de șiruri de caractere într-o listă de numere. Pentru detalii, consultați următorul articol.

Conversia șirurilor numerice în numere întregi: int()

Puteți utiliza int() pentru a converti un șir de numere în numere de tip întreg.

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

Decimalele, inclusiv punctele zecimale, și șirurile de caractere separate prin virgulă vor avea ca rezultat o eroare ValueError.

# print(int('1.23'))
# ValueError: invalid literal for int() with base 10: '1.23'

# print(int('10,000'))
# ValueError: invalid literal for int() with base 10: '10,000'

Șirurile delimitate prin virgulă pot fi convertite prin eliminarea virgulei (înlocuind-o cu un șir gol) cu ajutorul metodei replace().

print(int('10,000'.replace(',', '')))
# 10000

Conversia unui șir de numere în numere cu virgulă mobilă: float()

Un float() poate fi utilizat pentru a converti un șir de numere într-un tip de număr în virgulă mobilă.

print(float('1.23'))
print(type(float('1.23')))
# 1.23
# <class 'float'>

Șirurile cu partea întreagă omisă sunt convertite prin completarea părții întregi cu 0.

print(float('.23'))
# 0.23

Șirurile de numere întregi sunt, de asemenea, convertite în numere în virgulă mobilă.

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Convertește șirurile de caractere în notație binară, octală și hexazecimală în numere

În cazul în care se specifică un radix ca al doilea argument pentru int(), șirul de caractere poate fi convertit într-un int întreg considerându-l ca fiind binar, octal, hexazecimal etc.

print(int('100', 2))
print(int('100', 8))
print(int('100', 16))
# 4
# 64
# 256

Ca și în exemplele anterioare, dacă este omis, numărul este considerat a fi un număr zecimal.

print(int('100', 10))
print(int('100'))
# 100
# 100

Dacă radixul este setat la 0, conversia se bazează pe prefixul șirului. A se vedea mai jos pentru prefixe de șiruri de caractere.

  • 0b
    • 0B
  • 0o
    • 0O
  • 0x
    • 0X
print(int('0b100', 0))
print(int('0o100', 0))
print(int('0x100', 0))
# 4
# 64
# 256

Prefixele și alfabetul hexagonal pot fi scrise cu majuscule sau minuscule.

print(int('FF', 16))
print(int('ff', 16))
# 255
# 255

print(int('0xFF', 0))
print(int('0XFF', 0))
print(int('0xff', 0))
print(int('0Xff', 0))
# 255
# 255
# 255
# 255

Consultați următorul articol pentru informații privind interconversia numerelor și șirurilor de caractere binare, octale și hexazecimale.

Convertește șirurile de caractere în notație exponențială în valori numerice

Șirurile de caractere în notație exponențială pot fi convertite direct în tipul float cu float().

print(float('1.23e-4'))
print(type(float('1.23e-4')))
# 0.000123
# <class 'float'>

print(float('1.23e4'))
print(type(float('1.23e4')))
# 12300.0
# <class 'float'>

E minuscul poate fi scris și cu majusculă E.

print(float('1.23E-4'))
# 0.000123

Conversia șirurilor de cifre arabe pe toată lățimea în numere

Cifrele arabe de lățime întreagă pot fi convertite direct în numere prin int() sau float().

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Cu toate acestea, în cazul în care simbolurile, cum ar fi minus și punctele zecimale, sunt caractere de lățime completă, va fi generată o eroare ValueError.

# print(float('ー1.23'))
# ValueError: could not convert string to float: '1.23'

Numerele pot fi convertite fără probleme dacă sunt caractere de lățime completă, dar minusurile și punctele zecimale sunt caractere de jumătate de lățime. conversia este posibilă prin înlocuirea simbolurilor de lățime completă cu simboluri de jumătate de lățime cu ajutorul metodei replace().

print(float('-1.23'))
# -1.23

print(float('ー1.23'.replace('ー', '-').replace('.', '.')))
# -1.23

Conversia unui șir de caractere chinezești în numere

Funcția unicodedata.numeric() din modulul unicodedata poate fi utilizată pentru a converti un singur caracter chinezesc Unicode într-un număr de tip număr în virgulă mobilă.

Dacă nu este o singură literă, se va produce o eroare. De asemenea, caracterele nenumerice vor cauza o eroare.

import unicodedata

print(unicodedata.numeric('五'))
print(type(unicodedata.numeric('五')))
# 5.0
# <class 'float'>

print(unicodedata.numeric('十'))
# 10.0

print(unicodedata.numeric('参'))
# 3.0

print(unicodedata.numeric('億'))
# 100000000.0

# print(unicodedata.numeric('五十'))
# TypeError: numeric() argument 1 must be a unicode character, not str

# print(unicodedata.numeric('漢'))
# ValueError: not a numeric character