【问题标题】:Calculating Hours by Dividing Total Seconds by 3600用总秒数除以 3600 计算小时数
【发布时间】:2023-01-20 06:56:32
【问题描述】:

我正在尝试计算轮班结束时间到第二天的总工作时间。

tHours 不对。预期结果应为 12,但实际结果为 11。

sShift = 08:00 PM(开始班次)

eShift = 08:00 AM(下班)-> 第二天

Time1 = CDate(sShift.Text)
Time2 = CDate(eShift.Text)
                    
If (Time2 <= Time1) Then
    Total_Seconds = (Time2 + 1 - Time1) * 24 * 3600
Else
    Total_Seconds = (Time2 - Time1) * 24 * 3600
End If

tMins = Int((Total_Seconds Mod 3600) / 60)

tHours = Int(Total_Seconds / 3600)

Total_Seconds 43200 除以 3600 应该得到 12。但是 tHours 显示的是 11。


【问题讨论】:

  • 我的猜测是这是一个浮点错误。 total_seconds = 43200tHours = Int(total_seconds / 3600) 返回 12
  • 浮点数错误。正确声明你的变量和数据类型,你应该没问题(例如时间=>Date;小时/分钟/秒为Long
  • @Ron Rosenfeld:我认为这不会解决浮点问题。在这种情况下,我的建议是在计算后将 total_seconds 转换为 long 值

标签: excel vba


【解决方案1】:

该问题很可能是由浮点错误引起的。 article 阐明了这一点。

在这种情况下,我建议修正你的计算是使用

If (time2 <= time1) Then
    total_seconds = (time2 + 1 - time1) * 24 * 3600
Else
    total_seconds = (time2 - time1) * 24 * 3600
End If
total_seconds = CLng(total_seconds)

使用Option Explicit 也是一种很好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多