Подтвердить что ты не робот

Преобразование строки в целое число с десятичной точкой в ​​Python

У меня есть строка в формате: "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

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

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

4b9b3361

Ответ 1

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

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

Или...

>>> int(Decimal(s))
23

Или...

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

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

Ответ 2

Какое поведение округления вы хотите? Вы 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

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

Ответ 4

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

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

round(float('23.45678'))

Ответ 5

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

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

Ответ 6

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

Ответ 7

round(float("123.789"))

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

int(float("123.789"))

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