Tengo una variable ( float slope
) que a veces tendrá un valor de nan cuando se imprima, ya que a veces ocurre una división entre 0.
Estoy tratando de hacer un if-else para cuando eso suceda. ¿Cómo puedo hacer eso? if (slope == nan)
no parece funcionar.
objective-c
floating-point
teepusink
fuente
fuente
isnan(slope)
:; Swift para floatingPointType:slope.isNaN
Respuestas:
Dos formas, que son más o menos equivalentes:
if (slope != slope) { // handle nan here }
O
#include <math.h> ... if (isnan(slope)) { // handle nan here }
(
man isnan
le dará más información, o puede leerlo todo en el estándar C)Alternativamente, puede detectar que el denominador es cero antes de hacer la división (o usarlo
atan2
si solo va a terminar usandoatan
en la pendiente en lugar de hacer algún otro cálculo).fuente
if (foo != foo)
con algún código, soltaría un "WTF" muy audible.isnan
parece un método mucho más claro y legible.isnan
es mucho más claro.x != x
, a menos que esté compilando con -ffast-math o similar, en cuyo caso se expande a una llamada a__isnanf
o__isnand
(porquex != x
no funcionará correctamente bajo -ffast-math). Por lo que generalmente es mejor usarloisnan
.__isnanf
y se__isnand
expande?Nada es igual a
NaN
... incluyéndose aNaN
sí mismo. Así que compruebex != x
.fuente
if(isnan(slope)) { yourtextfield.text = @""; //so textfield value will be empty string if floatvalue is nan } else { yourtextfield.text = [NSString stringWithFormat:@"%.1f",slope]; }
Espero que esto funcione para usted.
fuente
En Swift, debe
slope.isNaN
verificar si es un NaN.fuente