Konverter talstreng str til tal int, float i Python

Forretning

Hvis du ønsker at konvertere en talstreng til numeriske værdier i Python, skal du bruge int() til at konvertere til hele tal og float() til at konvertere til flydende punkttal.

Følgende forklares her sammen med en kodeeksempel.

  • Grundlæggende brug
    • Konverter numeriske strenge til hele tal:int()
    • Konverter en talstreng til flydende punkttal:float()
  • Særlig anvendelse
    • Konverterer strenge i binær, oktal- og hexadecimal notation til tal
    • Konverterer strenge i eksponentiel notation til numeriske værdier
    • Konverter arabiske talstrenge i fuld bredde til tal
    • Konverter en streng af kinesiske tegn til tal

Hvis du vil konvertere en numerisk værdi til en streng, skal du bruge str().

Hvis du vil konvertere tal eller strenge til forskellige formater, skal du bruge funktionen format() eller strengmetoden str.format(). Derefter kan du konvertere til 0-fill, binær, oktal, hexadecimal, eksponentiel notation osv. Se følgende artikel for nærmere oplysninger.

Den kan også konvertere en liste af strenge til en liste af tal. Se følgende artikel for yderligere oplysninger.

Konverter numeriske strenge til hele tal: int()

Du kan bruge int() til at konvertere en talstreng til tal af typen heltal.

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

Decimaler, herunder decimaltal, og strenge adskilt af kommaer resulterer i en ValueError (værdifejl).

# 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'

Komma-delimiterede strenge kan konverteres ved at fjerne kommaet (erstatte det med en tom streng) ved hjælp af replace()-metoden.

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

Konverter en talstreng til flydende punkttal: float()

En float() kan bruges til at konvertere en talstreng til en type tal med flydende komma.

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

Strings med udeladt heltalsdel konverteres ved at supplere heltalsdelen med 0.

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

Integer-strenge konverteres også til flydende punkttal.

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

Konverterer strenge i binær, oktal- og hexadecimal notation til tal

Hvis der er angivet en radix som andet argument til int(), kan strengen konverteres til et heltal int ved at betragte den som binær, oktal, hexadecimal osv.

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

Som i de foregående eksempler anses tallet for at være et decimaltal, hvis det udelades.

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

Hvis radix er indstillet til 0, er konverteringen baseret på strengpræfikset. Se nedenfor om strengpræfikser.

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

Præfikser og hexabeter kan være enten store eller små bogstaver.

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

Se følgende artikel for oplysninger om interkonvertering af binære, oktale og hexadecimale tal og strenge.

Konverterer strenge i eksponentiel notation til numeriske værdier

Strings i eksponentiel notation kan konverteres direkte til float-typen 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'>

Mindre e kan også skrives med stor bogstav E.

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

Konverter arabiske talstrenge i fuld bredde til tal

Arabiske tal i fuld bredde kan konverteres direkte til tal 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'>

Hvis symboler som f.eks. minus og decimalperioder er tegn med fuld bredde, genereres der dog en ValueError.

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

Tal kan konverteres uden problemer, hvis de er tegn med fuld bredde, men minus- og decimaltegn er tegn med halv bredde. konvertering er mulig ved at erstatte symboler med fuld bredde med symboler med halv bredde ved hjælp af replace()-metoden.

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

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

Konverter en streng af kinesiske tegn til tal

Funktionen unicodedata.numeric() i unicodedata-modulet kan bruges til at konvertere et enkelt kinesisk Unicode-tegn til et tal af typen floating-point-tal.

Hvis det ikke er et enkelt bogstav, opstår der en fejl. Også ikke-numeriske tegn vil medføre en fejl.

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
Copied title and URL