为什么在moffice VBA中1/0和Sqr(-1)抛出错误,而不是在VB.NET中?



moffice VBA中,1 / 0抛出错误11,Sqr (-1)抛出错误5。但是在VB中。. NET,1 / 0不会抛出错误,其结果为"∞"。Math.Sqrt (-1)也不抛出错误,其结果为"NaN"。为什么会这样呢?

因为规范是这么说的。

. netDouble和VBA的DoubleIEEE浮点值支持特殊值

  • 正无穷,
  • 负无穷,和
  • NaN ("不是数字")。

然而,在VBA中,1 / 0在VBA规范中定义为

  • 不仅将结果设置为NaN,而且
  • 也会引发错误:

如果这导致非零值除以0,则运行时错误11(除法

[…]

在上述任何一种情况下,如果该表达式在一个Let赋值和两个操作数都声明了Double类型产生的IEEE 754双特殊值(如正/负无穷)

因此,您可以将VBADouble初始化为正无穷,如下所示:
Dim d As Double
On Error Resume Next
d = 1 / 0
On Error GoTo 0
Debug.Print d   ' yields " inf"

相关内容

  • 没有找到相关文章

最新更新