我有一个变量(float slope
),在打印出来时有时会具有nan的值,因为有时会发生被0除的情况。
我正在尝试在发生这种情况时进行if-else操作。我怎样才能做到这一点?if (slope == nan)
似乎不起作用。
Answers:
两种方式,或多或少等效:
if (slope != slope) {
// handle nan here
}
要么
#include <math.h>
...
if (isnan(slope)) {
// handle nan here
}
(man isnan
将为您提供更多信息,或者您可以在C标准中阅读所有信息)
或者,您可以在进行除法之前检测到分母为零(或者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];
}
希望这对您有用。