Ada*_*nst 67
所以,我发现class属性[NSDecimalNumber notANumber]
就是为了这个目的.在某些语言中NaN!= NaN,但在Cocoa中并非如此.
Jen*_*ton 17
正如Mike Abdullah所说,在Cocoa中表示NaN的自然方式是nil
,但[NSNumber numberWithDouble:NAN]
确实会返回一个有效的对象.没有NSNumber
特定的方法可以检测到这种情况,但通常的方法是isnan([foo doubleValue])
有效的.如果您不喜欢功能,可以将其添加到类别中.
Pet*_*ese 12
对于小数,至少:
[[NSDecimalNumber notANumber] isEqualToNumber:myNumber]
Run Code Online (Sandbox Code Playgroud)
Jak*_*ger 10
要确定NSNumber是否为NaN,请将其转换为double并使用C函数isnan()
:
NSNumber *validNumber = [NSNumber numberWithDouble: 1.];
NSLog( @"%d", isnan(validNumber.doubleValue) ); // prints "0"
NSNumber *nanNumber = [NSNumber numberWithDouble: 0./0.];
NSLog( @"%d", isnan(nanNumber.doubleValue) ); // prints "1"
Run Code Online (Sandbox Code Playgroud)
但是,您应该小心,因为还有其他特殊值,例如:
NSNumber *posInfinity = [NSNumber numberWithDouble: 1./0.];
NSLog( @"%d", isnan(posInfinity.doubleValue) ); // prints "0"
Run Code Online (Sandbox Code Playgroud)
如果您也想检查这些值,最好使用isnormal()
:
NSLog( @"%d", isnormal(validNumber.doubleValue) ); // prints "1"
NSLog( @"%d", isnormal(nanNumber.doubleValue) ); // prints "0"
NSLog( @"%d", isnormal(posInfinity.doubleValue) ); // prints "0"
Run Code Online (Sandbox Code Playgroud)
小智 9
我发现这有效,但它合法吗?
NSNumber *NaN = [NSDecimalNumber notANumber];
NSDecimalNumber *x = ... fill it somehow with NaN content ...
if ( x == NaN ) ... this works
Run Code Online (Sandbox Code Playgroud)
被NaN
guaranteeed是一个singleton
恒定值?会很酷,但我想它不是,因为我找到的所有例子都使用这些isEqual
方法.