में अनंतता और उससे परे के लिए यह पोस्ट .NET NaN के & के बारे में है अनंत मूल्यों को Excel 2010 VBA पर वापस भेज दिया जा रहा है।वीबीए
मैं अपने नियंत्रण में नहीं एक सी # विधि का उपयोग करता हूं जो (स्पष्ट रूप से) .NET NaN या Neg, Pos Infinity वापस कर सकता है। वीबीए में परिणाम अजीब हैं (यानी सामान्य से कमजोर), और एकमात्र तरीका जिस तरह से मैं सुरक्षित रूप से स्थिति से निपटने के लिए आया हूं वह एक अनूठा ट्रिपल-स्ट्रिंग तुलना है "-1। # IND" या "-1। # आईएनएफ" या "1. # आईएनएफ"।
क्या कोई बेहतर तरीका है?
यदि आप उत्सुक हैं तो मैंने यहां अजीब हिस्सा दस्तावेज किया है। (उदाहरण NaN लिए कर रहे हैं, लेकिन यह स्थिति या neg अनंत के लिए एक ही कहानी है।)
double dVal = CSharpMethodReturningDouble() ' via .NET assembly/COM interop
variant vVal = CSharpMethodReturningDouble() ' via .NET assembly/COM interop
सी # विधि देता है, तो एक double.NaN, तो हम (immed विंडो में) है:
?dVal
-1.#IND
?vVal
-1.#IND
(बॉक्स्ड) वेरिएंट NaN पकड़े सांख्यिक, प्रकार के लिए सकारात्मक परीक्षण = डबल (बॉक्स्ड) वेरिएंट NaN काम पर
?IsNumeric(vVal)
True
?TypeName(vVal)
Double
तुलना, लेकिन विपरीत परिणामों के साथ आप उम्मीद थी। (अनबॉक्स्ड) युगल पर तुलना (, और वापसी -1। # आईएनडी की उम्मीद के रूप में) (बॉक्स्ड) वेरिएंट कारण अतिप्रवाह अपवाद पर (अनबॉक्स्ड) संचालन काम दोगुना हो जाता है पर अतिप्रवाह अपवाद
?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)
संचालन कारण
?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