技术求助:报表中将分钟转换为小时和分钟的实现问题
十进制小时转“小时+分钟”格式解决方案
你的报表列Flying_time是通过decimal days * 24得到的十进制小时数(比如1.5小时对应90分钟),以下两种方法可直接实现格式转换:
方法一:直接用报表表达式(无需自定义代码)
替换列的表达式为:
= CStr(Int(Fields!Flying_time.Value)) & "小时" & CStr(Round((Fields!Flying_time.Value - Int(Fields!Flying_time.Value)) * 60, 0)) & "分钟"
逻辑说明:
Int(Fields!Flying_time.Value):提取小时数的整数部分(Fields!Flying_time.Value - Int(Fields!Flying_time.Value)) * 60:将小数部分转换为分钟,Round用于取整避免出现小数分钟
若需要更简洁的取整方式,也可使用CInt直接转换:
= CStr(CInt(Fields!Flying_time.Value)) & "小时" & CStr(CInt((Fields!Flying_time.Value - CInt(Fields!Flying_time.Value)) * 60)) & "分钟"
方法二:自定义代码实现
若必须使用自定义代码,按以下步骤操作:
- 打开报表属性,找到“代码”选项卡
- 粘贴以下VB代码:
Public Function ConvertToHoursMinutes(ByVal decimalHours As Decimal) As String Dim hours As Integer = CInt(Math.Floor(decimalHours)) Dim minutes As Integer = CInt(Math.Round((decimalHours - hours) * 60, 0)) Return hours & "小时" & minutes & "分钟" End Function
- 在列的表达式中调用该函数:
= Code.ConvertToHoursMinutes(Fields!Flying_time.Value)
特殊情况处理
如果Flying_time实际是总分钟数(而非十进制小时),直接使用以下表达式:
= CStr(Int(Fields!Flying_time.Value / 60)) & "小时" & CStr(Fields!Flying_time.Value Mod 60) & "分钟"
内容的提问来源于stack exchange,提问作者user22047654
相关产品推荐
相关产品推荐

