Konvertera nummersträng str till nummer int, float i Python

Företag

Om du vill konvertera en sträng av siffror till numeriska värden i Python använder du int() för att konvertera till heltal och float() för att konvertera till flyttal.

Följande förklaras här, tillsammans med exempelkod.

  • Grundläggande användning
    • Konvertera numeriska strängar till heltal:int()
    • Konvertera en sträng av siffror till flyttalstal:float()
  • Särskild användning
    • Konverterar strängar i binär, oktal och hexadecimal notation till tal.
    • Konverterar strängar i exponentiell notation till numeriska värden.
    • Konvertera arabiska siffersträngar med full bredd till siffror
    • Konvertera en sträng av kinesiska tecken till siffror

Om du vill konvertera ett numeriskt värde till en sträng använder du str().

Om du vill konvertera tal eller strängar till olika format använder du funktionen format() eller strängmetoden str.format(). Då kan du konvertera till 0-fyllning, binär, oktal, hexadecimal, exponentiell notation osv. Se följande artikel för mer information.

Den kan också konvertera en lista med strängar till en lista med siffror. Se följande artikel för mer information.

Konvertera numeriska strängar till heltal: int()

Du kan använda int() för att konvertera en sträng av tal till tal av heltalstyp.

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

Decimaler, inklusive decimalpunkter, och strängar separerade med kommatecken resulterar i ett 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'

Kommagränserade strängar kan konverteras genom att ta bort kommatecken (ersätta dem med en tom sträng) med hjälp av metoden replace().

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

Konvertera en sträng av siffror till flyttalstal: float()

En float() kan användas för att konvertera en sträng av siffror till en flyttalstyp.

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

Strängar med utelämnad heltalsdel konverteras genom att komplettera heltalsdelen med 0.

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

Heltalssträngar konverteras också till flyttalstal.

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

Konverterar strängar i binär, oktal och hexadecimal notation till tal.

Om ett radix anges som andra argument till int() kan strängen konverteras till ett heltal int genom att betrakta den som binär, oktal, hexadecimal osv.

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

Liksom i de tidigare exemplen anses talet vara ett decimaltal om det utelämnas.

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

Om radix är satt till 0 baseras konverteringen på strängprefixet. Se nedan för strängprefix.

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

Prefix och hexalfabet kan vara både stora och små bokstäver.

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

I följande artikel finns information om interkonvertering av binära, oktala och hexadecimala tal och strängar.

Konverterar strängar i exponentiell notation till numeriska värden.

Strängar i exponentiell notation kan konverteras direkt till floattyp med 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'>

Liten e kan också skrivas med stor bokstav E.

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

Konvertera arabiska siffersträngar med full bredd till siffror

Arabiska siffror med full bredd kan konverteras direkt till siffror med int() eller float().

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

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

Om symboler som t.ex. minus och decimalperioder är tecken med full bredd genereras dock ett ValueError.

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

Siffror kan konverteras utan problem om de är tecken med full bredd, men minus- och decimaltecken är tecken med halv bredd.Konvertering är möjlig genom att ersätta symboler med full bredd med symboler med halv bredd med hjälp av metoden replace().

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

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

Konvertera en sträng av kinesiska tecken till siffror

Funktionen unicodedata.numeric() i modulen unicodedata kan användas för att konvertera ett enda kinesiskt Unicode-tecken till ett tal av typen flyttal.

Om det inte är en enda bokstav uppstår ett fel. Även icke-numeriska tecken orsakar ett fel.

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