Строковое представление числа: от int до string в Python

Раздел: Основы Python -> Преобразование типов

Основной и самый простой способ получить строковое представление числа - использовать встроенную функцию str(). Она возвращает человекочитаемую строку, которая подходит для вывода на экран или записи в файл.


number = 123
string_number = str(number)
print(string_number)          # '123'
print(type(string_number))    # <class 'str'>

изменить тип в python (изменить тип в python)

Функция работает с любыми числовыми типами: целыми (int), вещественными (float), комплексными (complex). Проблемы возникают только при передаче нечислового объекта, но в рамках преобразования типов это основной инструмент.

Типичная ошибка: попытка сложить число и строку без явного преобразования. Например:


age = 25
print("Возраст: " + age)  # TypeError: can only concatenate str (not "int") to str

Python int to str (преобразование int в строку в python)

Исправляется предварительным вызовом str(age).

Как получить строку для воссоздания объекта с помощью repr()?

Функция repr() возвращает строку, которая, будучи переданной в eval(), воссоздаст исходный объект (насколько это возможно). Для чисел отличие заметно у вещественных чисел: repr() даёт более точное представление.


from decimal import Decimal
x = 1.0 / 3.0
print(str(x))   # 0.3333333333333333
print(repr(x))  # 0.3333333333333333 (на практике совпадает, но гарантировано больше знаков)
y = Decimal('0.1')
print(repr(y))  # Decimal('0.1')

Python bytes to string (преобразование байтов в строку в python)

Использование eval() на непроверенной строке, полученной через repr(), может быть небезопасным. Не рекомендуется применять eval() к строкам из ненадёжных источников.

Как вставить число в строку с форматированием (f-строки)?

F-строки (Python 3.6+) позволяют включать выражения прямо в строковый литерал. Можно задать количество знаков после запятой, выравнивание, символ-заполнитель и другие спецификаторы.


pi = 3.1415926535
print(f"Число π примерно {pi:.3f}")           # Число π примерно 3.142
print(f"{pi:10.2f}")                          # '      3.14' (ширина 10)
print(f"{123456789:,}")                       # '123,456,789' (разделители тысяч)

как выводить в строку python (преобразование вывода в строку в python)

Ошибка: неправильный синтаксис спецификатора (например, :.2f для целого числа вызовет ValueError). Если переменная не определена, возникает NameError.

Какие старые способы форматирования существуют (format() и %)?

Метод format() и оператор % (старый стиль) тоже преобразуют числа в строки с контролем представления.


# Метод format()
print("{:.2f}".format(3.14159))   # '3.14'
print("{:<10}".format(42))       # '42        ' (выравнивание влево)

# Оператор %
print("%.2f" % 3.14159)          # '3.14'
print("%d %x %o" % (255, 255, 255))  # '255 ff 377'

Python list to string (преобразование списка в строку python)

Путаница между типами спецификаторов: %d для целых, %f для вещественных. Использование неверного спецификатора ведёт к TypeError.

Как получить строку в другой системе счисления (двоичной, восьмеричной, шестнадцатеричной)?

Встроенные функции bin(), oct(), hex() возвращают строку с префиксом системы. Для вывода без префикса используют format() или f-строки.


n = 255
print(bin(n))    # '0b11111111'
print(oct(n))   # '0o377'
print(hex(n))   # '0xff'
print(f"{n:#x}") # '0xff'  (с префиксом)
print(f"{n:08b}") # '11111111' (двоичное без префикса, 8 бит с ведущими нулями)

Python string integer (преобразование строки в целое число python)

Ошибки: передача нецелого числа (например, float) вызовет TypeError: 'float' object cannot be interpreted as an integer.

Как из строки получить число (обратное преобразование)?

Для преобразования строки в число используются int() и float(). Можно указать основание системы счисления для int().


int("123")           # 123
int("ff", 16)        # 255
float("3.14")        # 3.14
# Не рекомендуется:
eval("123")          # 123 (опасно)

преобразовать тип данных python (преобразование типа данных в python)

Ошибка: ValueError возникает, если строка не является валидным числом или содержит лишние символы (например, int("12.3")). Пробелы в начале и конце допускаются. Для вещественных чисел с ведущими нулями проблем нет, но int("0x1A") не сработает без указания base=16.

Что делать, если строка может быть не числом? Обработка ошибок.

Для безопасного преобразования используется конструкция try-except.


def safe_int(s):
    try:
        return int(s)
    except ValueError:
        return None

print(safe_int("42"))    # 42
print(safe_int("abc"))   # None

Некорректная обработка: перехват слишком общего исключения (например, except Exception) может скрыть другие ошибки. Лучше ловить только ValueError.

- Python string number (строковое представление числа в python)
- функция str в python (функция str() в python)
- Python int char (преобразование int в символ в python)

Расширенные примеры и советы по строковому представлению чисел

Ниже приведены более сложные случаи, которые могут потребоваться на практике.

Форматирование с выравниванием, заполнением и знаками

Пример

# Выравнивание вправо, ширина 10, заполнитель '0'
print(f"{42:010d}")           # '0000000042'
# Выравнивание влево с заполнением '*'
print(f"{42:*<10}")         # '42********'
# Центрирование
print(f"{42:=^10}")         # '====42===='
# Принудительный вывод знака
print(f"{42:+} {42:-} {42: }")  # '+42 42 42'
0000000042
42********
====42====
+42 42 42

Научная (экспоненциальная) нотация

Пример

big = 1.234e6
print(f"{big:.2e}")   # '1.23e+06'
print(f"{big:.2E}")   # '1.23E+06'
print(f"{big:.0e}")   # '1e+06'
1.23e+06
1.23E+06
1e+06

Форматирование с разделителями тысяч и локалью

Пример

import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')  # может отличаться в зависимости от ОС
print(locale.format_string("%d", 1234567, grouping=True))  # '1 234 567' (с пробелом)
# В f-строках без locale:
print(f"{1234567:,}")  # '1,234,567'
1 234 567
1,234,567

Преобразование с сохранением точности (decimal.Decimal)

Пример

from decimal import Decimal, getcontext
getcontext().prec = 6
d = Decimal('1.23456789')
print(f"{d:.4f}")          # '1.2346' (округление)
print(str(d))              # '1.23456789' (полное значение)
print(repr(d))             # "Decimal('1.23456789')"
1.2346
1.23456789
Decimal('1.23456789')

Комплексные числа и их строковое представление

Пример

c = 3 + 4j
print(str(c))    # '(3+4j)'
print(repr(c))   # '(3+4j)'
print(f"{c:.2f}")  # '(3.00+4.00j)'  (форматирование компонент)
(3+4j)
(3+4j)
(3.00+4.00j)

Парсинг чисел из строк с нестандартным форматом

Пример

# Удаление разделителей и замена запятой на точку
s = "1 234,56"
s_clean = s.replace(' ', '').replace(',', '.')
value = float(s_clean)
print(value)  # 1234.56
1234.56

Использование регулярных выражений для извлечения чисел

Пример

import re
text = "Цена: 199.99 руб., количество: 5 шт."
matches = re.findall(r"\d+\.?\d*", text)
print(matches)  # ['199.99', '5']
numbers = [float(x) if '.' in x else int(x) for x in matches]
print(numbers)  # [199.99, 5]
['199.99', '5']
[199.99, 5]

Строковое представление числа в Python - comments

En
Python string number (python)