2017-02-21 968 views
0

我正在Python中使用游泳結果(來自外部xls源代碼),我需要將float轉換爲時間格式 - 分鐘,秒和微秒 - 以執行加法和減法操作。 我使用這個功能:如何將float轉換爲時間格式 - 分,秒和微秒 - 在Python中?

from datetime import timedelta 
def format_result(result): 
    seconds = int(result) 
    microseconds = int((result * 1000000) % 1000000) 
    output = timedelta(0, seconds, microseconds) 
    return output 

當給定的輸入爲131.39,輸出應該是0:02:11.390000但實際上是0:02:11.389999。 如何在沒有此精度錯誤的情況下正確轉換?

+4

將它解析爲一個字符串而不是一個浮點數 – Falmarri

+0

正在考慮同樣的事情@Falmarri – WhatsThePoint

+0

float在這種情況下是a **中的一種痛苦...... –

回答

0

我試過沒有將它轉換成int,它工作正常,因爲你的擴展它給了390000 ....!

from datetime import timedelta 
def format_result(result): 
    seconds = int(result) 
    microseconds = (result * 1000000) % 1000000 
    output = timedelta(0, seconds, microseconds) 
    return output 

print format_result(131.39) 
+0

簡單而有效。謝謝。 – jaguas

2

所有你需要做的是將其轉換爲UTC時間和日期時間format

>>> import datetime 
>>> datetime.datetime.strftime(datetime.datetime.utcfromtimestamp(131.39), "%M:%S:%f") 
'02:11:390000' 

你需要做什麼,

import datetime 
def format_result(result): 
    date = datetime.datetime.utcfromtimestamp(result) 
    output = datetime.datetime.strftime(date, "%M:%S:%f") 
    return output 
print format_result(131.39) 

希望這會有所幫助。

+0

@jaguas這是否適合你! –

+0

在我的腳本中,我必須將結果導出到xlsx,因爲它不會在Excel中識別爲時間格式(mm:ss,00)。在Python中,它是可以的。 – jaguas