To determine if NSNumber is NaN, convert it to double and use the C isnan() function:
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"
However, you have to be careful because there are other special values, for example:
NSNumber *posInfinity = [NSNumber numberWithDouble: 1./0.]; NSLog( @"%d", isnan(posInfinity.doubleValue) );
If you also want to check these values, it is better to use isnormal() instead:
NSLog( @"%d", isnormal(validNumber.doubleValue) ); // prints "1" NSLog( @"%d", isnormal(nanNumber.doubleValue) ); // prints "0" NSLog( @"%d", isnormal(posInfinity.doubleValue) ); // prints "0"
Jakob Egger Nov 15 '12 at 19:01 2012-11-15 19:01
source share