Вопрос по decimal, python, string, integer – Преобразовать строку в целое с десятичным в 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
Я мог бы также разделить на ".", Затем вычесть десятичную дробь из нуля, а затем добавить это к целому числу ... чёрт.
Но я предпочел бы иметь его как int, без ненужных преобразований типов или маневрирования.
round(float("123.789"))
даст вам целочисленное значение, но с плавающей запятой. Однако при типизировании утиной Python фактический тип обычно не очень важен. Это также округляет значение, которое вы можете не захотеть. Заменить «круглый» с 'int' и у вас будет только усеченный и действительный тип int. Как это:
int(float("123.789"))
Но, опять же, фактический «тип» обычно это не так важно.
& Quot; Преобразовать & Quot; имеет смысл только при переходе с одного типа данных на другой без потери точности. Число, представленное строкой, является числом с плавающей запятой и теряет точность при введении в int.
Возможно, вместо этого вы хотите округлить (я надеюсь, что числа не представляют валюту, потому что тогда округление становится намного сложнее).
round(float('23.45678'))
Выражениеint(float(s))
упомянутое другими является лучшим, если вы хотите усечь значение. Если вы хотите округлить, используяint(round(float(s))
если алгоритм раунда соответствует тому, что вы хотите (см.круглая документация), иначе вы должны использоватьDecimal
и один, если его алгоритмы округления.