Konwersja ciągu liczbowego str na liczbę int, float w Pythonie

Biznes

Jeśli chcesz przekonwertować ciąg liczb na wartości liczbowe w Pythonie, użyj int() do konwersji na liczby całkowite i float() do konwersji na liczby zmiennoprzecinkowe.

Objaśniono tu następujące zagadnienia wraz z przykładowym kodem.

  • Użycie podstawowe
    • Konwertuj ciągi liczbowe na liczby całkowite:int()
    • Konwertuj ciąg liczb na liczby zmiennoprzecinkowe:float()
  • Zastosowanie specjalne
    • Konwertuje ciągi znaków w notacji binarnej, ósemkowej i szesnastkowej na liczby
    • Konwertuje ciągi znaków w notacji wykładniczej na wartości liczbowe
    • Konwertuj ciągi cyfr arabskich o pełnej szerokości na liczby
    • Konwertuj ciąg znaków chińskich na liczby

Aby przekonwertować wartość liczbową na ciąg znaków, użyj funkcji str().

Jeśli chcesz przekonwertować liczby lub ciągi znaków na różne formaty, użyj funkcji format() lub metody łańcuchowej str.format(). W ten sposób można konwertować na notację zerojedynkową, binarną, ósemkową, szesnastkową, wykładniczą itd. Szczegółowe informacje na ten temat można znaleźć w poniższym artykule.

Może także konwertować listę łańcuchów na listę liczb. Szczegółowe informacje na ten temat można znaleźć w poniższym artykule.

Konwertuj ciągi liczbowe na liczby całkowite: int()

Funkcji int() można użyć do konwersji ciągu liczb na liczby typu całkowitego.

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

Wartości dziesiętne, w tym przecinki, oraz ciągi znaków oddzielone przecinkami spowodują wystąpienie błędu 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'

Łańcuchy ograniczone przecinkami można przekonwertować, usuwając przecinek (zastępując go pustym łańcuchem) za pomocą metody replace().

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

Konwertuj ciąg liczb na liczby zmiennoprzecinkowe: float()

Funkcja float() może być użyta do konwersji ciągu liczb na typ liczby zmiennoprzecinkowej.

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

Łańcuchy z pominiętą częścią całkowitą są konwertowane przez uzupełnienie części całkowitej liczbą 0.

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

Ciągi liczb całkowitych są również konwertowane na liczby zmiennoprzecinkowe.

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

Konwertuje ciągi znaków w notacji binarnej, ósemkowej i szesnastkowej na liczby

Jeśli jako drugi argument funkcji int() zostanie podany radix, to łańcuch może zostać przekonwertowany na liczbę całkowitą int przez potraktowanie go jako liczby binarnej, ósemkowej, szesnastkowej itd.

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

Podobnie jak w poprzednich przykładach, jeśli liczba zostanie pominięta, będzie traktowana jako liczba dziesiętna.

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

Jeśli radix jest ustawiony na 0, konwersja jest dokonywana na podstawie prefiksu łańcucha. Informacje o prefiksach łańcuchów znajdują się poniżej.

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

Przedrostki i alfabety heksadecymalne mogą być pisane wielkimi lub małymi literami.

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

Informacje na temat konwersji liczb i ciągów binarnych, ósemkowych i szesnastkowych można znaleźć w poniższym artykule.

Konwertuje ciągi znaków w notacji wykładniczej na wartości liczbowe

Ciągi w notacji wykładniczej można bezpośrednio przekonwertować na typ float za pomocą funkcji 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'>

Małe e może być również pisane wielką literą E.

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

Konwertuj ciągi cyfr arabskich o pełnej szerokości na liczby

Cyfry arabskie o pełnej szerokości mogą być przekształcane bezpośrednio na liczby za pomocą funkcji int() lub float().

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

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

Jeśli jednak symbole, takie jak minus i kropki dziesiętne, są znakami o pełnej szerokości, zostanie wygenerowany błąd ValueError.

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

Liczby mogą być konwertowane bez problemów, jeśli są znakami o pełnej szerokości, ale minus i przecinek dziesiętny są znakami o połowie szerokości. konwersja jest możliwa dzięki zastąpieniu symboli o pełnej szerokości symbolami o połowie szerokości za pomocą metody replace().

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

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

Konwertuj ciąg znaków chińskich na liczby

Funkcja unicodedata.numeric() w module unicodedata może być użyta do konwersji pojedynczego chińskiego znaku Unicode na liczbę typu zmiennoprzecinkowego.

Jeśli nie jest to pojedyncza litera, wystąpi błąd. Błąd spowodują również znaki nienumeryczne.

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