2010-08-12 12 views
71

Ich habe eine Variable (float slope), die manchmal einen Wert von Nan hat, wenn sie ausgedruckt wird, da manchmal eine Division durch 0 auftritt.Objective C - float checking für nan

Ich versuche, ein wenn-sonst zu tun, wenn das passiert. Wie kann ich das machen? if (slope == nan) scheint nicht zu funktionieren.

+3

möglich Duplikat von [isNan in objective c] (http://stackoverflow.com/questions/2109257/isnan-in-objective-c) –

+1

Objective-C für float oder double: 'isnan (slope)'; Swift für floatingPointType: 'slope.isNaN' –

Antwort

188

Zwei Möglichkeiten, die mehr oder weniger gleichwertig sind:

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

Oder

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

(man isnan finden Sie weitere Informationen geben, oder Sie können alles darüber in der C-Standard lesen)

Alternativ können Sie erkennen, dass der Nenner Null ist, bevor Sie die Kluft zu tun (oder atan2 verwenden, wenn Sie gehen nur 01 am Ende mitauf der Piste anstatt einige andere Berechnungen durchzuführen).

+87

Wenn ich jemals in einem Code auf 'if (foo! = Foo)' gestoßen bin, würde ich einen sehr hörbaren" WTF "hören. 'Isnan' scheint eine * weit * klarere und lesbarere Methode zu sein. –

+5

@Squeegy: für jemanden, der mit Fließkomma vertraut ist, lesen sie das gleiche. Für jemanden, der nicht ist, ja, isnan ist viel klarer. –

+3

'Steigung! = Steigung' ist brillant. Vielen Dank! – JohnK

32

Nichts ist gleich NaN - einschließlich NaN selbst. Überprüfen Sie also x != x.

+3

Danke für die Erklärung! – 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]; 
} 

Hoffe, das wird für Sie arbeiten.

1

In Swift, müssen Sie slope.isNaN tun zu prüfen, ob es sich um eine NaN ist.