Как изменить формат / количество отображаемых цифр? - PullRequest
0 голосов
/ 01 декабря 2011

Я очень новичок в Python и у меня есть вопрос. В настоящее время я использую это для подсчета времени между отправкой сообщения и входящим сообщением. Полученное время начала, разница времени и уникальный идентификатор затем представляются в файле. Также я использую Python 2.7.2

В настоящее время вычитается два раза, и результат равен 0,002677777777 (0,00 - часы и минуты), который мне не нужен. Как мне отформатировать его так, чтобы оно начиналось с секунд (59,178533,00) с 59 секундами. Кроме того, иногда Python будет отображать число как 8,9999999 х E-05. Как я могу заставить его всегда отображать точное число.

def time_deltas(infile): 
   entries = (line.split() for line in open(INFILE, "r")) 
   ts = {}  
   for e in entries: 
      if " ".join(e[2:5]) == "OuchMsg out: [O]": 
         ts[e[8]] = e[0]    
      elif " ".join(e[2:5]) == "OuchMsg in: [A]":    
         in_ts, ref_id = e[0], e[7] 
         out_ts = ts.pop(ref_id, None)    
         yield (float(out_ts),ref_id[1:-1], float(in_ts) - float(out_ts))

INFILE = 'C:/Users/klee/Documents/Ouch20111130_cartprop04.txt'
import csv

with open('output_file.csv', 'w') as f: 
   csv.writer(f).writerows(time_deltas(INFILE))

Вот небольшая выборка данных:

61336.206267 - OuchMsg out: [O] enter order. RefID [F25Q282588] OrdID [X1F3500687  ]

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Если float(out_ts) - часы, то '{0:.3f}'.format(float(out_ts) * 3600.) даст вам текстовое представление секунд с тремя цифрами после десятичной точки.

1 голос
/ 01 декабря 2011

Как заставить его всегда отображать точное число.

Это иногда невозможно из-за неточностей с плавающей запятой

Что вы можете сделать, с другой стороны, это отформатировать ваши поплавки, как вы хотите. См. здесь для получения инструкций.

E.G: замените строку yield на:

yield ("%.5f"%float(out_ts),"%.5f"%ref_id[1:-1], "%.5f"%(float(in_ts) - float(out_ts)))

для усечения всех ваших значений до 5 цифр после запятой. Существуют и другие параметры форматирования для множества различных форматов.

...