为什么0/0
将Overflow error
投放到VBA中,而在.Net语言中只是Division by 0
错误?
例如,在C#
中,它是System.DivideByZeroException
static void Main()
{
int k = 0;
int p = 0;
Console.WriteLine(k/p);
}
Div/0
中存在 VBA
错误。 但是 0/0
提供了溢出异常,而其他任何除以0的内容都会产生Div/0
异常:
Public Sub TestMe()
'Integer
PrintAndCheck (11) '- Division by zero error
'Double
PrintAndCheck (0.9) '- Division by zero error
'Long
PrintAndCheck (50000) '- Division by zero error
'String
PrintAndCheck ("1.1") '- Division by zero error
'----------------------------------------------------
'----------------BUT---------------------------------
'----------------------------------------------------
'Integer
PrintAndCheck (0) '- Overflow?
End Sub
Public Sub PrintAndCheck(lngDivisor As Variant)
On Error Resume Next
Debug.Print lngDivisor / 0
Debug.Print Err.Description & " from type -> " & VarType(lngDivisor)
On Error GoTo 0
End Sub
这就是你在即时窗口中得到的结果:
Division by zero from type -> 2
Division by zero from type -> 5
Division by zero from type -> 3
Division by zero from type -> 8
Overflow from type -> 2
Public Sub TestMe()
On Error Resume Next
Debug.Print Evaluate("0/0") 'Division by 0 error (CVErr(xlErrDiv0)=2007)
Debug.Print 0 \ 0 'Division by 0 error
Debug.Print Err.Description
On Error GoTo 0
End Sub
答案 0 :(得分:1)
除了语言实现和VBA
处理division
的方式明显不同之外,上面的MS Doc链接扩展了overflow exception
的原因,如果操作数数据类型是整数那么它将抛出Overflow exception
(下面的最后声明)
或者,\
division operator会检查您的范围并抛出Division by zero
例外
答案 1 :(得分:1)
将尝试总结评论中的答案:
在VBA中 0/0 会抛出溢出异常,因为 0/0 是除以 0 的特定情况。因此,抛出与标准Division by zero error
不同的例外是个好主意。
在VBA Evaluate("0/0")
中返回Division by zero error
,因为Evaluate不会引发错误,它会返回带有错误标志的Variant值,并且没有"溢出&#34 ;国旗可用。
在VBA中,整数除法 0 \ 0 返回Division by zero error
,因为结果应为整数值,而#IND是浮点值。至于#IND不能返回,它提供了下一个最好的东西 - Division by zero error
。
关于 0/0 的更多阅读用其他语言: