Вопрос по python – Python с плавающей точкой в преобразовании int

7

У меня есть проблема, которая действительно сводит меня с ума. Обычно делаюint(20.0) приведет к20. Все идет нормально. Но

levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())]

в то время какgex_dict[i] возвращает число с плавающей запятой, например20.0, результаты в:

"invalid literal for int() with base 10: '20.0'"

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

Привет, Джамилак, да, ты прав, это были строки, а не поплавки, спасибо! langohrschnauze
Можете ли вы опубликовать тип контента вgex_dict. Я думаю, что у вас есть строки, которые выглядят как поплавки, а не поплавки. jamylak

Ваш Ответ

4   ответа
1

что у вас есть строка, а не число с плавающей точкой, посмотрите на это как сравнение:

>>> int(20.0)
20
>>> int('20.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '20.0'

Вы можете обойти эту проблему, сначала конвертировав во float, а затем в int:

>>> int(float('20.0'))
20

Так было бы в вашем случае:

levels = [int(float(gex_dict[i])) for i in sorted(gex_dict.keys())]
2

gex_dict[i] на самом деле возвращает строковое представление с плавающей точкой'20.0'. Хотя int () имеет возможность приводить из числа с плавающей точкой к int и строковое представление целого числа к int. У него нет возможности приводить из строкового представления типа float к int.

Документацию по int можно найти здесь:http: //docs.python.org/library/functions.html#in

14

'20.0' это строка, а неfloat; Вы можете сказать, используя одинарные кавычки в сообщении об ошибке. Вы можете получитьint из этого, сначала проанализировав его сfloat, затем обрезать его с помощьюint:

>>> int(float('20.

(Хотя, возможно, вы захотите хранить в своем словаре плавающие слова вместо строк, поскольку вы, похоже, ожидаете этого.)

+ 1 за предложение исправить проблему у источника. Junuxx
Эй, большое спасибо вам обоим !!! (это было быстро !!!) langohrschnauze
2

что значение является строкой, а не плавающей точкой. Так что вам нужноint(float(gex_dict[i]))

Похожие вопросы