Ich habe eine Variable ( float slope
), die beim Ausdrucken manchmal den Wert nan hat, da manchmal eine Division durch 0 auftritt.
Ich versuche ein Wenn-Sonst zu tun, wenn das passiert. Wie kann ich das machen? if (slope == nan)
scheint nicht zu funktionieren.
objective-c
floating-point
teepusink
quelle
quelle
isnan(slope)
; Swift für floatPointType:slope.isNaN
Antworten:
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
gibt Ihnen weitere Informationen, oder Sie können alles darüber im C-Standard lesen)Alternativ können Sie feststellen, dass der Nenner vor dem Teilen Null ist (oder verwenden,
atan2
wenn Sie nuratan
auf der Steigung verwenden, anstatt eine andere Berechnung durchzuführen).quelle
if (foo != foo)
einen Code stoßen würde, würde ich eine sehr hörbare "WTF" ausstoßen.isnan
scheint eine weitaus klarere und lesbarere Methode zu sein.isnan
ist das viel klarer.x != x
, es sei denn, Sie kompilieren mit -ffast-math oder ähnlichem. In diesem Fall wird es auf einen Aufruf von__isnanf
oder erweitert__isnand
(dax != x
es unter -ffast-math nicht ordnungsgemäß funktioniert). Daher ist es im Allgemeinen am besten zu verwendenisnan
.__isnanf
und__isnand
erweitert?Nichts ist gleich
NaN
- einschließlich sichNaN
selbst. Also überprüfex != x
.quelle
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 dich funktionieren.
quelle
In Swift müssen Sie
slope.isNaN
überprüfen, ob es sich um eine NaN handelt.quelle