Hoe String naar Float of Int in Python te converteren

  1. float() om string te converteren naar float in Python
  2. int() om string naar int te converteren in Python
  3. ast.literal_eval om string te converteren naar float of int in Python
  4. Lokalisatie en komma’s bij het converteren van tekenreeks naar zwevend in Python
  5. Vergelijking van uitvoeringen van verschillende methoden om string te converteren naar float of int in Python

In dit tutorial artikel wordt beschreven hoe u een string naar float of int in Python converteert.

float() om string te converteren naar float in Python

float() converteert de tekenreeks naar het float aanwijsnummer, indien mogelijk.

>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0

int() om string naar int te converteren in Python

int() zou de string naar een geheel getal kunnen converteren als de gegeven string de representatie van een geheel getal is. Anders zal het verhogen ValueError.

>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'

Je zou de string float eerst kunnen omzetten naar en vervolgens naar kunnen casten int als de gegeven string de weergave is van een zwevend wijzend getal.

>>> int(float('111.0'))
111

ast.literal_eval om string te converteren naar float of int in Python

ast.literal_eval(string) evalueer veilig de gegeven string die een Python-expressie bevat. Het zou de string naar float of int automatisch kunnen omzetten.

>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111

Lokalisatie en komma’s bij het converteren van tekenreeks naar zwevend in Python

Als de komma , voorkomt in de stringvoorstelling, genereert de float conversie een ValueError uitzondering. Maar komma’s worden regelmatig gebruikt als scheidingsteken voor duizend in landen zoals de VS of het VK, bijvoorbeeld 111,111.22 , of als decimaal in de meeste Europese landen, bijvoorbeeld 111,222.

>>> float('111,111.22')
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    float('111,111')
ValueError: could not convert string to float: '111,111'

De locale module moet worden gebruikt om de locale-informatie toe te wijzen en vervolgens kan de locale.atof() functie de gegeven string als float volgens de locale-instellingen ontleden.

Komma’s als scheidingsteken voor duizendtallen in de VS of het VK

>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0

De komma , kan correct worden geïnterpreteerd als de juiste landinstelling wordt opgegeven.

Houd er ook rekening mee dat het conversieresultaat altijd een float type is, zelfs als de gegeven stringvoorstelling een geheel getal is.

Komma’s als demisch kenmerk in Europese landen

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222

111,222 wordt 111.222 correct omgezet , en 111.111,222 kan ook correct worden omgezet 111111.222 omdat het punt . wordt gebruikt als de duizendscheider in Europese landen zoals Nederland.

Vergelijking van uitvoeringen van verschillende methoden om string te converteren naar float of int in Python

We gebruiken timeit om de efficiëntieprestaties tussen verschillende methoden te controleren.

>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917

ast.literal_eval() methode is enorm langzamer dan float methode zoals hierboven weergegeven. Het zou niet de eerste keuze moeten zijn als je simpelweg een string moet converteren naar float of int in Python. ast.literal_eval() is overwerkt in deze toepassing omdat het hoofddoel de tekenreeks met Python-expressie moet zijn.

locale.atof() is ook extreem traag, daarom moet het alleen worden gebruikt wanneer komma’s in de string voor de conventie in de VS of het VK voorkomen, of punt . de duizendscheider , betekent, maar komma betekent de decimale markering in Europese landen. Met andere woorden, u moet gebruiken locale.atof() als het echt nodig is.

Gerelateerde Artikelen - Python String

  • Hoe controleer je of een string leeg is op een pythonische manier
  • Hoe witruimte in een string te verwijderen
  • Hoe tekenreeks naar datetime te converteren
  • Hoe tekenreeks naar kleine letters te converteren in Python 2 en 3