У мене є змінна ( float slope
), яка іноді матиме значення nan при роздрукуванні, оскільки іноді відбувається поділ на 0.
Я намагаюся зробити інше, якщо це трапиться. Як я можу це зробити? if (slope == nan)
здається, не працює.
У мене є змінна ( float slope
), яка іноді матиме значення nan при роздрукуванні, оскільки іноді відбувається поділ на 0.
Я намагаюся зробити інше, якщо це трапиться. Як я можу це зробити? if (slope == nan)
здається, не працює.
isnan(slope)
:; Swift for floatingPointType:slope.isNaN
Відповіді:
Два шляхи, які більш-менш еквівалентні:
if (slope != slope) {
// handle nan here
}
Або
#include <math.h>
...
if (isnan(slope)) {
// handle nan here
}
( man isnan
надасть вам більше інформації, або ви можете прочитати все про це в стандарті С)
Крім того, ви можете виявити, що знаменник дорівнює нулю, перш ніж робити поділ (або використовувати, atan2
якщо ви просто збираєтеся використовувати atan
на схилі, а не робити якісь інші обчислення).
if (foo != foo)
з яким-небудь кодом, я б видав дуже чутний "WTF". isnan
здається набагато чіткішим і читабельнішим методом.
isnan
це набагато зрозуміліше.
x != x
, якщо ви не компілюєте з -ffast-math або подібним, і в цьому випадку він розширюється до виклику __isnanf
або __isnand
(оскільки x != x
не працює належним чином під -ffast-math). Тому, як правило, найкраще використовувати isnan
.
__isnanf
і __isnand
розширює?
if(isnan(slope)) {
yourtextfield.text = @"";
//so textfield value will be empty string if floatvalue is nan
}
else
{
yourtextfield.text = [NSString stringWithFormat:@"%.1f",slope];
}
Сподіваюся, це буде працювати для вас.