這篇文章是關於.NET NaN的& Inifinite值傳遞迴Excel 2010 VBA。在VBA中無限擴展
我使用的C#方法不在我的控制之下(顯然)可以返回.NET NaN或Neg,Pos Infinity。在VBA中的結果是奇怪的(即比平常更奇怪),我想出的安全處理這種情況的唯一方法是不合理的三串比較「-1。#IND」或「-1。#INF」或「1.#INF」。
有沒有更好的方法?
如果您好奇,我已經記錄了這裏的怪異部分。 (例子是NaN的,但它是正或負無窮大,同樣的故事。)
double dVal = CSharpMethodReturningDouble() ' via .NET assembly/COM interop
variant vVal = CSharpMethodReturningDouble() ' via .NET assembly/COM interop
如果C#方法返回一個double.NaN,那麼我們有(在IMMED窗口):
?dVal
-1.#IND
?vVal
-1.#IND
的(盒裝)的變體保持NaN的測試呈陽性的數字,類型=雙上(盒裝)的變體NaN的工作
?IsNumeric(vVal)
True
?TypeName(vVal)
Double
比較,但相反的結果,你會期望。在(無盒裝)雙打 比較導致溢出異常
?vVal=1 '<== NaN comparisons should always return false
True
?vVal=0 '<== that's not what you get with -1.#IND
True
?dVal=0 '<== strangely, the same comparison on the unboxed double fails
(OverFlow Exc)
操作上(盒裝)變異的原因溢出異常 操作上(無盒裝)加倍工作(並返回-1。#IND,如預期)
?vVal * 1.1 '<== even stranger, for arith ops its the boxed value that fails
(Overflow Exc)
?dVal * 1.1 '<== but the operation on the unboxed double goes through
-1.#IND
ISERROR,則IsNumeric不幫:
?IsError(vVal)
False
?IsError(dVal)
False
?IsNumeric(vVal)
True
?IsNumeric(dVal)
True
可以隨時使用字符串比較測試:
?vVal = "-1.#IND"
True
?dVal = "-1.#IND"
True
參見:http://stackoverflow.com/q/2731445/50776 – casperOne 2012-02-09 02:42:57