2015-10-18 66 views
1

我需要將時間(02.35)的浮點數表示法轉換爲分鐘數。從Prolog獲取浮點數的十進制數

所以我得到02通過地板函數(地板(02.35)= 2),然後乘以60

我怎樣才能獲得從浮點數(02.35)十進制數(35)?

謝謝!

+0

浮點數是受精度問題。有理數似乎更適合這種情況,或者,正如@repeat已經提出的那樣,可能使用兩個整數分量來表示小時和分鐘? – mat

+0

@mat。其實,我贊成使用花車來獲取日期時間信息!但代表應該更好地避免差距/歧義。在這種情況下,浮標的有限精度不是問題,IMO。 – repeat

+1

在這種情況下,我不推薦使用浮點數:日期和時間通常以小數表示,很多十進制數如'0.1'不能用有限浮點數表示。例如:??格式(「〜20f」,[0.1])。,產生:「0.10000000000000000555」。在我看來,理性或整數元組是更好的選擇。 – mat

回答

0

所以我嘗試了不同的方法,這個工程。

time_to_minutes(TimeAsDouble, TimeInMinutes):- 
    HH is floor(TimeAsDouble), 
    MM is integer(100*(TimeAsDouble-HH)), 
    TimeInMinutes is ((HH*60) + MM). 

編輯:修復了代碼

+0

我的不好,修好了。謝謝 – KasparTr

+0

好的。你使用的表示有點奇怪,不一定是錯誤的,但查詢'? - time_to_minutes(2.99,219),time_to_minutes(3.39,219).'成功......這是故意的嗎? – repeat

+0

不,但我需要將24h時間的雙重表示轉換爲分鐘的內容。所以通過上下舍入,我設法讓它工作。它的設計目的不是爲了反向工作(意思是檢查真/假)。 – KasparTr