Převod číselného řetězce str na číslo int, float v jazyce Python

Podnikání

Pokud chcete v jazyce Python převést řetězec čísel na číselné hodnoty, použijte funkci int() pro převod na celá čísla a funkci float() pro převod na čísla s pohyblivou řádovou čárkou.

Zde je vysvětlen následující postup spolu s ukázkovým kódem.

  • Základní použití
    • Převod číselných řetězců na celá čísla:int()
    • Převod řetězce čísel na čísla s pohyblivou řádovou čárkou:float()
  • Zvláštní použití
    • Převádí řetězce v binárním, osmičkovém a šestnáctkovém zápisu na čísla.
    • Převádí řetězce v exponenciální notaci na číselné hodnoty
    • Převod řetězců arabských číslic na celou šířku na čísla
    • Převést řetězec čínských znaků na čísla

Chcete-li převést číselnou hodnotu na řetězec, použijte funkci str().

Pokud chcete převést čísla nebo řetězce do různých formátů, použijte funkci format() nebo řetězcovou metodu str.format(). Pak můžete převádět na 0-plnou, binární, osmičkovou, šestnáctkovou, exponenciální notaci atd. Podrobnosti naleznete v následujícím článku.

Dokáže také převést seznam řetězců na seznam čísel. Podrobnosti naleznete v následujícím článku.

Převod číselných řetězců na celá čísla: int()

Pomocí funkce int() můžete převést řetězec čísel na čísla celočíselného typu.

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

Desetinná čísla včetně desetinných teček a řetězce oddělené čárkami způsobí chybu 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'

Řetězce oddělené čárkou lze převést odstraněním čárky (nahrazením prázdným řetězcem) pomocí metody replace().

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

Převod řetězce čísel na čísla s pohyblivou řádovou čárkou: float()

K převodu řetězce čísel na typ čísla s pohyblivou řádovou čárkou lze použít funkci float().

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

Řetězce s vynechanou celočíselnou částí se převedou doplněním celočíselné části číslem 0.

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

Celočíselné řetězce jsou rovněž převedeny na čísla s pohyblivou řádovou čárkou.

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

Převádí řetězce v binárním, osmičkovém a šestnáctkovém zápisu na čísla.

Pokud je jako druhý argument funkce int() zadán radix, lze řetězec převést na celé číslo int tak, že jej považujeme za binární, oktalový, hexadecimální atd.

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

Stejně jako v předchozích příkladech, pokud je číslo vynecháno, považuje se za desetinné číslo.

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

Pokud je radix nastaven na 0, převod se provádí na základě prefixu řetězce. Prefixy řetězců viz níže.

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

Předpony a šestnáctkové abecedy mohou být psány velkými nebo malými písmeny.

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

Informace o převodu binárních, oktalových a hexadecimálních čísel a řetězců najdete v následujícím článku.

Převádí řetězce v exponenciální notaci na číselné hodnoty

Řetězce v exponenciálním zápisu lze převést přímo na typ float pomocí funkce 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'>

Malé e lze psát také s velkým písmenem E.

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

Převod řetězců arabských číslic na celou šířku na čísla

Arabské číslice plné šířky lze převést přímo na čísla pomocí funkce int() nebo float().

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

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

Pokud jsou však symboly, jako jsou minus a desetinné tečky, znaky plné šířky, bude vygenerována chyba ValueError.

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

Čísla lze převádět bez problémů, pokud se jedná o znaky plné šířky, ale minus a desetinná tečka jsou znaky poloviční šířky. převod je možný nahrazením znaků plné šířky znaky poloviční šířky pomocí metody replace().

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

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

Převést řetězec čínských znaků na čísla

Funkci unicodedata.numeric() v modulu unicodedata lze použít k převodu jednoho čínského znaku Unicode na číslo s pohyblivou řádovou čárkou.

Pokud se nejedná o jedno písmeno, dojde k chybě. Chybu způsobí i jiné než číselné znaky.

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