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

Не позволяйте вопросу, "какой быстрее" быть решающим фактором, которого можно использовать. Возможности, Вы никогда не собираетесь заботиться так очень, и кроме того, время считывания программиста является намного более дорогим, чем машинное время.

Использование, какой бы ни имеет большую часть смысла человеку, читающему код.

52
задан Matt Hampel 7 July 2009 в 09:35
поделиться

7 ответов

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

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

Или ...

>>> int(Decimal(s))
23

Или ...

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

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

104
ответ дан 7 November 2019 в 09:11
поделиться

Какое поведение округления вам нужно? У вас 2.67, чтобы превратиться в 3, или 2. Если вы хотите использовать округление, попробуйте следующее:

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

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

s = '234.67'
i = int(float(s))
13
ответ дан 7 November 2019 в 09:11
поделиться
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

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

3
ответ дан 7 November 2019 в 09:11
поделиться

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

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

round(float('23.45678'))
2
ответ дан 7 November 2019 в 09:11
поделиться

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

1
ответ дан 7 November 2019 в 09:11
поделиться

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

s = '23.245678'
i = int(float(s))
1
ответ дан 7 November 2019 в 09:11
поделиться
round(float("123.789"))

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

int(float("123.789"))

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

0
ответ дан 7 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

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