Crystal reports 在Crystal Reports 2008中,如何将表示时间的十进制数转换为实际时间?例如:“;1.5“;代表1:30

Crystal reports 在Crystal Reports 2008中,如何将表示时间的十进制数转换为实际时间?例如:“;1.5“;代表1:30,crystal-reports,Crystal Reports,我正在尝试编辑一个现有的Crystal报告,该报告显示了工单的时间限制。预算时间/实际时间/剩余时间类型交易 这些字段显示为未正确转换报告数据字段中的时间。做报告的人已经有了一些公式,但我不知道它在做什么 公式:标准时间 Stringvar array Std_Time := split(replace(cstr({WOMNT_CARD.STANDARD_HOURS_DURATION}),",",""),"."); val(Std_Time[1])*60+val(Std_Time[2]) 报

我正在尝试编辑一个现有的Crystal报告,该报告显示了工单的时间限制。预算时间/实际时间/剩余时间类型交易

这些字段显示为未正确转换报告数据字段中的时间。做报告的人已经有了一些公式,但我不知道它在做什么

公式:标准时间

Stringvar array Std_Time := split(replace(cstr({WOMNT_CARD.STANDARD_HOURS_DURATION}),",",""),".");

val(Std_Time[1])*60+val(Std_Time[2])
报告中使用的字段是@标准时间(数字)的总和


如何解决此问题,以便正确转换这些数字?

您发布的公式执行以下操作:

首先,它使用
cstr
函数将
{WOMNT\u CARD.STANDARD\u HOURS\u DURATION}
字段的数据类型转换为字符串,使用
replace
函数去除逗号,并使用点字符作为分隔符将结果字符串拆分为数组

因此,对于值1.5,
Std_Time
变量将包含以下内容

60 * val(replace(cstr({WOMNT_CARD.STANDARD_HOURS_DURATION}),",",""))
标准时间[1]→ 一,

标准时间[2]→ 五,

最后,它通过将第一个索引的第一个值乘以60来计算结果,并将第二个索引的值相加。值1.5变为1*60+5=65

如果1.5必须表示1:30,则最后一行必须为

val(Std_Time[1]) * 60 + 60 * val(Std_Time[2]) / 10
因为60*5/10=30

或者,为了简单起见,您可以使用以下命令

60 * val(replace(cstr({WOMNT_CARD.STANDARD_HOURS_DURATION}),",",""))

因为60*1.5=90

我不认为
1.72
意味着
1小时72分钟
。它的意思是
1小时+72%的一小时
,意思是
1小时+0.72*60分钟
=>
1:43
我尝试了我在帖子中看到的两个不同的公式,它们要么根本不起作用,要么返回0:0。@Byte仓鼠你是最新的。这是一个可怕的例子。因此,相反,Ex:1.50->1:30I从未使用Crystal Reports。但是你需要这样的东西:小时:
Floor(1.5)
=
1
。会议记录:
(1.5-楼层(1.5))*60
=
(1.5-1)*60
=
0.5*60
=
30
谢谢。谢谢你的解释。这很有效。