2012-11-28 49 views
5

में निरर्थक डबल NaN तुलना में मेरे पास 2 निरर्थक युगल, एक अपेक्षित मूल्य और वास्तविक मान है (चलिए उन्हें मूल्य और मूल्य अनुमानित कहते हैं)। एक प्रतिशत 100 * (मूल्य/मूल्य अनुमानित) का उपयोग करके पाया जाता है। हालांकि, यदि मान अपेक्षित शून्य है, तो यह NaN लौटाता है। सब कुछ अब तक अच्छा है।सी #

अब, अगर मुझे मूल्य की जांच करने की आवश्यकता है, तो मैं क्या करूँगा यह देखने के लिए कि क्या यह NaN है? आम तौर पर एक इस्तेमाल कर सकते हैं:

if (!Double.IsNaN(myDouble)) 

लेकिन इस नल मूल्यों के साथ काम नहीं करता है (IsNaN केवल गैर-व्यर्थ चर के साथ काम करता है)। मैंने चेक करने के लिए अपना कोड बदल दिया है (valueExpected == 0), लेकिन मैं अभी भी उत्सुक हूं - क्या एक नामुमकिन NaN की जांच करने का कोई तरीका है?

संपादित करें: जब मैं कहता हूं कि कोड काम नहीं करता है, तो मेरा मतलब है कि यह संकलित नहीं होगा। शून्य के लिए परीक्षण पहले काम नहीं करता है।

उत्तर

10

सभी Nullable<T> उदाहरणों के साथ, आप पहले bool HasValue संपत्ति की जांच करें, और फिर आप T Value संपत्ति तक पहुंच सकते हैं।

double? d = 0.0;  // Shorthand for Nullable<double> 
if (d.HasValue && !Double.IsNaN(d.Value)) { 
    double val = d.Value; 

    // val is a non-null, non-NaN double. 
} 
+0

शायद यह सिर्फ दृश्य स्टूडियो है कि मुझे रोक रही है। मेरे पास कुछ ऐसा था: ' अगर (myDouble! = Null) { अगर (! डबल। आईएसएनएएन (myDouble)) { // सामान करो! } } ' लेकिन यह और आपका कोड संकलित नहीं होता है, फिर भी यह 'नल' चेक के बाद भी IsNaN का उपयोग करना पसंद नहीं करता है। –

+1

क्या आप चर नाम "डी" के बाद ".Value" देखते थे। डी। वैल्यू एक डबल है और इसे निश्चित रूप से संकलित करना चाहिए। –

+0

मेरा कोड बस ठीक है। आपके द्वारा जोड़ा गया "शून्य है" चेक कुछ भी नहीं बदलता है। आपका कोड अभी भी गलत है। 'myDouble' एक 'Nullable ' है जबकि' IsNaN() '' डबल' की अपेक्षा करता है। आपको ** 'value' प्रॉपर्टी का उपयोग करना होगा। –

1

तुम भी

if (!Double.IsNaN(myDouble ?? 0.0)) 

मूल्य भीतरी सबसे कोष्टक में उपयोग कर सकते हैं या तो myDouble (अपने Nullable<> रैपिंग के साथ हटा दिया) है कि यदि गैर-शून्य, या बस 0.0 अगर myDouble है null। से ?? Operator (C#)

0

मेरे पास एक ही समस्या थी और मैंने इसे डबल कास्टिंग के साथ हल किया? डबल

double.IsNaN((double)myDouble) 

के साथ इस करता है, तो NaN सच्चे और अवास्तविक लौटाते हैं नहीं तो