为什么160 * 1440会出现溢出错误?

时间:2019-04-19 16:33:41

标签: excel vba

我正在处理日期,却遇到了一个奇怪的问题。如果将160乘以1440、60 * 24,即使使用long,vba也会产生溢出错误。但是,如果将160乘以86440、60 * 60 * 24,则不会发生溢出错误。有谁知道为什么会这样吗?我已经找到了解决方法,但这没有任何意义。

谢谢您的帮助!

Sub test()
Dim numb As Long
numb=160*1440
numb=160*86400
End Sub

如果注释掉第一行,它将运行而不会出现溢出错误,但是会出现第一行,并且会出现溢出错误。

1 个答案:

答案 0 :(得分:2)

好的,起初我有点困惑,但是现在我明白了。请注意,这将导致溢出错误:

Sub Test()
    Dim numb As Long
    numb = 160 * 32767
    Debug.Print numb
End Sub

但这不会:

Sub Test()
    Dim numb As Long
    numb = 160 * 32768
    Debug.Print numb
End Sub

如果您的计算结果大于32767(整数上限),并且计算中涉及的两个数字均为整数,则存在数据类型转换问题,从而导致溢出。因此,您必须使用CLng()强制进行转换,以避免出现错误:

Sub Test()
    Dim numb As Long
    numb = 160 * CLng(32767)
    Debug.Print numb
End Sub