2014-12-16 3 views
-1

Я хочу напечатать значение float, которое я получил после выполнения некоторой математики в виде строки в формате hh: mm. В настоящее время у меня есть: (время в данном случае равно поплавок, как 9.888888888888886 или 09:50 (как я хочу))Преобразование формата float в hh: mm

time = str(time) 
    time = time.split(".") 
    time[1] = float(time[1]) 
    time[1] *= 0.6 
    time[1] = str(time[1]) 

и когда я печатаю я использую

str(time[0]) + ":" + time[1][:2] 

Любые способ достижения этого эффекта последовательно? С более продвинутыми входами мой выше код работает неправильно и выводит неправильное время.

+0

Определение "не работает должным образом". Определите «неправильное время». –

ответ

4

в качестве альтернативы использованию datetime, вы можете просто использовать простое форматирование с небольшим количеством математики, например:

result = '{0:02.0f}:{1:02.0f}'.format(*divmod(time * 60, 60)) 
2

Использование datetime.timedelta:

>>> import datetime 
>>> datetime.timedelta(hours=9.888888888888886) 
datetime.timedelta(0, 35600) 
>>> str(datetime.timedelta(hours=9.888888888888886)) 
'9:53:20' 
>>> str(datetime.timedelta(hours=9.888888888888886)).rsplit(':', 1)[0] 
'9:53' 

>>> datetime.datetime.combine(datetime.date.today(), datetime.time()) + \ 
... datetime.timedelta(hours=9.888888888888886) 
datetime.datetime(2014, 12, 16, 9, 53, 20) 
>>> _.strftime('%H:%M') 
'09:53' 
1

Предполагая, что вы хотите превратить 9.888888888888886 в 09:53, на основе бывших точечными часов быть плавающими, и вы не хотите, чтобы беспокоиться о днях, без библиотеку, которую вы могли бы просто сделать:

fhours = 9.888888888888886 
ihours = int(ihours) 
"%02d:%02d" % (ihours,(fhours-ihours)*60) 

Только с m модуль ATH, попробуйте

import math 
"%02d:%02d" % (fhours,math.modf(fhours)[0]*60) 

Вы могли бы подумать, что с помощью datetime модуль поможет, но это на самом деле немного неудобный. Вы можете получить объект timedelta пропускания в ваших дробных часах:

import datetime 
td = datetime.timedelta(hours=9.888888888888886) 

Но получить, что во временном объект или объект даты и времени в формат является сложными немного, вы в конечном итоге, сделать что-то вроде

import datetime 
td = datetime.timedelta(hours=9.888888888888886) 
(datetime.datetime(2000,1,1)+td).strftime("%H:%M") 

(Это использует случайно выбрала дату, чтобы получить время дельты в DateTime использовать)

1

Используя divmod, вы получите остаток и частное от деления.

minutes = 9.888888888888886*60 
hours, minutes = divmod(minutes, 60) 

print "%02d:%02d"%(hours,minutes) 

Выход:

09:53 

Если вы хотите секунданты тоже:

seconds = 9.888888888888886*60*60 
minutes, seconds = divmod(seconds, 60) 
hours, minutes = divmod(minutes, 60) 

print "%02d:%02d:%02d"%(hours,minutes,seconds) 
Смежные вопросы