早上好,
我遇到的问题是关于时间值的逻辑陈述没有按预期进行评估。
是否存在逻辑上等同重复小数的已知问题?
为清楚起见,这里是相关代码的示例。
Function compareTimes(timeCurrent, timeStart, timeEnd, timeBreak1, Optional timeLunch As Variant, Optional timeBreak2 As Variant)
If timeCurrent >= timeStart And timeCurrent < timeEnd Then
If timeCurrent = timeBreak1 Or timeCurrent = timeBreak2 Then
compareTimes = "b"
ElseIf IsMissing(timeLunch) = False Then
timeLunchEnd = timeLunch + (1 / 48)
If timeCurrent >= timeLunch And timeCurrent < timeLunchEnd Then
compareTimes = "L"
Else
compareTimes = 1
End If
Else
compareTimes = 1
End If
Else
compareTime = 0
End If
End Function
该函数的所有参数都是Excel时间,格式为h:mm。 错误的一个示例是第二个If语句 - 当timeCurrent和timeBreak1是Excel中的同一个单元格时,该函数按预期输出“b”。 但是如果timeCurrent和timeBreak1在具有相同值的不同单元格中(例如12:00),则返回1。
非常感谢任何有关理解逻辑和浮点的帮助。
答案 0 :(得分:0)
虽然您可能将时间显示为h:mm,但Excel实际上存储的全部值包括秒。如果将单元格格式更改为h:mm:ss,则值可能与假设的“相同”不同。时间存储为Date.Time,其中,小数点前的数字表示天数,小数点后的数字表示24小时工作日的小数部分(即0.5 =中午12:00)。尝试更改单元格的格式以显示日期和时间,以确保整个“日期值”与您的期望一致。
时间变量应定义为double,以确保所考虑的数据类型没有问题。目前尚不清楚时间是如何进入的。