我有一个表达式,它使用以下表达式汇总Reporting Services中小时,分钟和秒(HH:MM:SS)的值:
=CStr(sum(CInt(split(Fields!Column.Value,":")(0)))+sum(CInt(split(Fields!Column.Value,":")(1)))\60)
&":"& CStr(sum(CInt(split(Fields!Column.Value,":")(1))) mod 60+sum(CInt(split(Fields!Column.Value,":")(2)))\60)
&":"& CStr(sum(CInt(split(Fields!Column.Value,":")(2))) mod 60)
看起来或工作正常,直到用户发现当我们的值为60时,分钟没有被四舍五入。例如,我有这样的总数
5:60:42, 7:60:02 and so on
如何在表达式中纠正此错误,以便在达到60时将分钟值正确舍入?
答案 0 :(得分:1)
我相信这应该可以解决问题。
=CStr(sum(CInt(split(Fields!Column.Value,":")(0)))+(sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))\60)\60)
&":"& CStr((sum(CInt(split(Fields!Column.Value,":")(1))) + sum(CInt(split(Fields!Column.Value,":")(2)))\60) mod 60)
&":"& CStr(sum(CInt(split(Fields!Column.Value,":")(2))) mod 60)
在取mod 60
之前,您必须首先计算所有分钟的总和
我将尝试解释使用伪代码,这是用于计算总分钟数:
[(
sum_of_all_min
mod 60)+(sum_of_all_sec
\ 60)]
[
sum_of_all_min
+(sum_of_all_sec
\ 60)] mod 60
在计算小时总数时可以应用相同的值,您必须在除以60之前使用总分钟数量。
sum_of_all_hours
+ [sum_of_all_min
+(sum_of_all_sec
\ 60)] \ 60
数字示例,假设你得到了这个:
sum_total_hours = 5
sum_total_min = 59
sum_total_sec = 75
5 +(59 \ 60)
:
(59 mod 60)+(75 \ 60):
(75 mod 60)
=> 5 +(0):
(59)+(1):
(15)<登记/> =&gt; 05:60:15
5 + [59 +(75 \ 60)] \ 60
:
[59 +(75 \ 60)] mod 60:
(75 mod 60)
=&gt; 5 + [59 +(1)] \ 60:
[59 +(1)] mod 60:
(15)
=&gt; 5 + [60] \ 60:
[60] mod 60:
(15)<登记/> =&gt; 06:00:15