2010-08-12 11 views
71

के लिए फ्लोट जांच मेरे पास एक चर (float slope) है जो कभी-कभी 0 से विभाजित होने के बाद मुद्रित होने पर नैन का मूल्य होगा।उद्देश्य सी - नैन

मैं ऐसा करने की कोशिश कर रहा हूं, जब ऐसा होता है। मैं उसे कैसे कर सकता हूँ? if (slope == nan) काम नहीं कर रहा है।

+3

संभवतः डुप्लिकेट [उद्देश्य सी में isan है] (http://stackoverflow.com/questions/2109257/isnan-in-objective-c) –

+1

फ्लोट या डबल के लिए उद्देश्य-सी: 'इस्नान (ढलान) '; फ़्लोटिंग के लिए स्विफ्टपॉइंट टाइप: 'slope.isNaN' –

उत्तर

188

दो तरीके है, जो कम या ज्यादा बराबर हैं:

if (slope != slope) { 
    // handle nan here 
} 

या

#include <math.h> 
... 
if (isnan(slope)) { 
    // handle nan here 
} 

(man isnan आप अधिक जानकारी दे देंगे, या आप इसके बारे में सब सी मानक में पढ़ सकते हैं)

वैकल्पिक रूप से, आप यह पता लगा सकते हैं कि विभाजन करने से पहले denominator शून्य है (या atan2 का उपयोग करें यदि आप 01 का उपयोग कर समाप्त होने जा रहे हैं कुछ अन्य गणना करने की बजाय ढलान पर)।

+87

अगर मैं कभी भी कुछ कोड में 'if (foo! = Foo)' पर आया तो मैं एक बहुत ही श्रव्य" डब्ल्यूटीएफ "छोड़ दूंगा। 'isnan' एक * दूर * अधिक स्पष्ट और पठनीय विधि की तरह लगता है। –

+5

@ स्क्वीगी: फ़्लोटिंग पॉइंट से परिचित किसी व्यक्ति को, वे वही पढ़ते हैं। जो कोई नहीं है, हां, 'इस्नान' और अधिक स्पष्ट है। –

+3

'ढलान! = ढलान 'शानदार है। धन्यवाद! – JohnK

32

कुछ भी NaN के बराबर नहीं है - जिसमें NaN भी शामिल है। तो x != x देखें।

+3

धन्यवाद! – cdavidyoung

4
if(isnan(slope)) { 

    yourtextfield.text = @""; 
    //so textfield value will be empty string if floatvalue is nan 
} 
else 
{ 
    yourtextfield.text = [NSString stringWithFormat:@"%.1f",slope]; 
} 

आशा है कि यह आपके लिए काम करेगा।

1

स्विफ्ट में, आपको यह जांचने के लिए slope.isNaN करना होगा कि यह एक NaN है या नहीं।