2015-10-18 102 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