我无法在任何地方找到的简单问题。当我进行算术运算时,似乎自然类型是将值视为16Bit Integers。
我尝试将60 * 60 * 8 * 5
的结果保存到较长时间内,但我发现Overflow
错误,甚至有机会将该数字保存为Long
:
Dim secondsInAWorkWeek As Long
secondsInAWorkWeek = 60 * 60 * 8 * 5
Long应该乐意存储最多2个 31 = 2,147,483,647
如何安全地执行乘法转换为长
答案 0 :(得分:2)
好的,根据Overflow when multiplying Integers and assigning to Long,您需要为Excel提供一个运行开始,否则它会将乘法中的每个值都默认为整数。
刚开始使用CLng
进行长时间投射,然后将完成剩下的工作:
Dim secondsInAWorkWeek As Long
secondsInAWorkWeek = CLng(1) * 60 * 60 * 8 * 5
答案 1 :(得分:2)
为了从一般(默认)类型强制文字到特定类型,有某些约定:http://msdn.microsoft.com/en-us/library/dzy06xhf.aspx
这导致了这段代码:
Dim secondsInAWorkWeek As Long
Let secondsInAWorkWeek = 60& * 60& * 8& * 5&
或:
Const DAYS_IN_WEEK = 5&
Const HOURS_IN_DAY = 8&
Const MINUTES_IN_HOUR = 60&
Const SECONDS_IN_MINUTE = 60&
Dim secondsInAWorkWeek As Long
Let secondsInAWorkWeek = _
DAYS_IN_WEEK _
* HOURS_IN_DAY _
* MINUTES_IN_HOUR _
* SECONDS_IN_MINUTE
要写的更多,真实,但是类型安全,几乎不需要任何解释/评论,并且当他们投票10小时工作日时很容易改变。 : - )