сохранение одинакового форматирования для значений с плавающей запятой
-
03-07-2019 - |
Вопрос
У меня есть программа на Python, которая считывает значения с плавающей запятой, используя следующее регулярное выражение
(-?\d+\.\d+)
как только я извлекаю значение с помощью float(match.group(1)), я получаю фактическое число с плавающей запятой.Однако я не могу определить, было ли это число 1.2345678, 1.234 или 1.2340000.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы снова распечатать значение с плавающей запятой с точно таким же форматированием.Простое решение состоит в том, чтобы "разделить и посчитать" значение с плавающей запятой, когда оно все еще является строкой, например разделяя по десятичной запяте и подсчитывая длину целой части и длину дробной части, затем создайте форматировщик следующим образом
print "%"+str(total_len)+"."+str(fractional_len)+"f" % value
но , может быть , вы знаете стандартный способ добиться того же результата ?
Решение
Ваш метод в принципе верен.Строковое форматирование используется реже *
оператор, который вы можете указать для размеров форматирования, вот некоторый код:
import re
def parse_float(str):
re_float = re.compile(r'(-?)(\d+)\.(\d+)')
grps = re_float.search(str)
sign, decimal, fraction = grps.groups()
float_val = float('%s%s.%s' % (sign, decimal, fraction))
total_len = len(grps.group(0))
print '%*.*f' % (total_len, len(fraction), float_val)
parse_float('1.2345678')
parse_float('1.234')
parse_float('1.2340000')
и это выводит
1.2345678
1.234
1.2340000
Другие советы
Если вы хотите сохранить фиксированную точность, избегайте использования float
ы и использовать Decimal
вместо этого:
>>> from decimal import Decimal
>>> d = Decimal('-1.2345')
>>> str(d)
'-1.2345'
>>> float(d)
-1.2344999999999999
>>> from decimal import Decimal as d
>>> d('1.13200000')
Decimal('1.13200000')
>>> print d('1.13200000')
1.13200000