Вопрос по decimal, python, string, integer – Преобразовать строку в целое с десятичным в Python

49

У меня есть строка в формате: «nn.nnnnn» в Python, и я хотел бы преобразовать его в целое число.

Прямое преобразование не выполняется:

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

Я могу преобразовать его в десятичную с помощью:

>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678

Я мог бы также разделить на ".", Затем вычесть десятичную дробь из нуля, а затем добавить это к целому числу ... чёрт.

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

Matt, 23.45678 не является целым числом. Если вы хотите, чтобы Python преобразовал строку в целое число, убедитесь, что вы задали ему целое число. Аргументы могут быть сделаны в любом случае о том, что "правильно" Дело в том, и в конце концов кто-то собирается быть несчастным. Christopher

Ваш Ответ

7   ответов
0
round(float("123.789"))

даст вам целочисленное значение, но с плавающей запятой. Однако при типизировании утиной Python фактический тип обычно не очень важен. Это также округляет значение, которое вы можете не захотеть. Заменить «круглый» с 'int' и у вас будет только усеченный и действительный тип int. Как это:

int(float("123.789"))

Но, опять же, фактический «тип» обычно это не так важно.

13

Какое поведение при округлении вы хотите? У вас 2,67, чтобы превратить в 3, или 2. Если вы хотите использовать округление, попробуйте это:

s = '234.67'
i = int(round(float(s)))

В противном случае просто сделайте:

s = '234.67'
i = int(float(s))
3
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

Вы не указываете, хотите ли вы округлить или нет ...

2

& Quot; Преобразовать & Quot; имеет смысл только при переходе с одного типа данных на другой без потери точности. Число, представленное строкой, является числом с плавающей запятой и теряет точность при введении в int.

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

round(float('23.45678'))
99

Как насчет этого?

>>> s = '23.45678'
>>> int(float(s))
23

Или же...

>>> int(Decimal(s))
23

Или же...

>>> int(s.split('.')[0])
23

Я сомневаюсь, что это станет намного проще, я боюсь. Просто примите это и двигайтесь дальше.

Следует отметить тип округления, предлагаемый каждым параметром для значения.
Запомниimport decimal затем использовать его какdecimal.Decimal(5) или делатьfrom decimal import Decimal и использовать его какDecimal(5), Я всегда забываю
1

Вы можете использовать:

s = '23.245678'
i = int(float(s))
1

Выражениеint(float(s)) упомянутое другими является лучшим, если вы хотите усечь значение. Если вы хотите округлить, используяint(round(float(s)) если алгоритм раунда соответствует тому, что вы хотите (см.круглая документация), иначе вы должны использоватьDecimal и один, если его алгоритмы округления.

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