Как преобразовать строку в плавучую или интру в Python
-
float()
для преобразования строки вfloat
на Python -
int()
преобразует строку в int на Python -
ast.literal_eval
для преобразования строки в float или int на Python - Локализация и запятые при преобразовании строки в float на Python
- Сравнение выполнения различных методов преобразования строки в float или int на Python

В этой обучающей статье мы расскажем, как конвертировать строку в float
или int
на Python.
float()
для преобразования строки в float
на Python
float()
преобразует строку в число float
, если это возможно.
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
int()
преобразует строку в int на Python
int()
может преобразовать строку в целое число, если данная строка является представлением целого числа. В противном случае это приведет к ошибке ValueError
.
>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'
Можно сначала преобразовать строку в float
, а затем привести ее к int
, если заданная строка является представлением числа с плавающей точкой.
>>> int(float('111.0'))
111
ast.literal_eval
для преобразования строки в float или int на Python
ast.literal_eval(string)
безопасно оценить данную строку, содержащую выражение на языке Python. Это может автоматически преобразовать строку в float
или int
.
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
Локализация и запятые при преобразовании строки в float на Python
Если в строковом представлении существует запятая ,
, то при преобразовании float
будет выброшено исключение ValueError
. Но запятые регулярно используются либо как тысячный разделитель в таких странах, как США или Великобритания, например, 111,111.22
, либо как десятичная метка в большинстве европейских стран, например, 111,222
.
>>> float('111,111.22')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
float('111,111')
ValueError: could not convert string to float: '111,111'
Модуль locale
должен использоваться для присвоения информации о локали, а затем функция locale.atof()
может разобрать данную строку как плавающую в соответствии с настройками локали.
Комментарии как тысяча разделителей в США или Великобритании
>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0
Запятая ,
может быть правильно интерпретирована, если задана правильная настройка локали.
Имейте также в виду, что результат преобразования всегда является типом float
, даже если заданное строковое представление является целым числом.
Запятые как демический знак в европейских странах
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
111,222
конвертируется в 111.222
правильно, и 111.111,222
также может быть конвертирован правильно в 111111.222
, так как точка .
используется в качестве тысячи сепаратор в европейских странах, таких как Нидерланды.
Сравнение выполнения различных методов преобразования строки в float или int на Python
Мы используем таймит
для проверки эффективности различных методов.
>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917
Метод ast.literal_eval()
значительно медленнее, чем метод float
, как показано выше. Он не должен быть первым выбором, если вам просто нужно преобразовать строку в float или int на Python. Метод ast.literal_eval()
перепроектирован в этом приложении, так как его основной целью должно быть вычисление строки, содержащей выражение на языке Python.
locale.atof()
также чрезвычайно медленное, поэтому его следует использовать только тогда, когда в строке для конвенции существуют запятые в США или Великобритании, или точка .
означает тысячу разделителей, а запятая ,
означает десятичную метку в европейских странах. Другими словами, если это действительно необходимо, следует использовать locale.atof()
.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedInСопутствующая статья - Python String
- Как проверить, что строка пуста в Python
- Как удалить белый пробел в строке на Python
- Как конвертировать строку в дату на Python
- Как преобразовать строку в нижний кейс на Python 2 и 3
- Как проверить, содержит ли струна подвеску на Python
- Как преобразовать список в струну на Python