反转负NSNumber

时间:2014-04-18 12:04:21

标签: ios nsnumber

有人能告诉我使NSNumber为阴性的最有效方法吗?

2 个答案:

答案 0 :(得分:3)

这样做通常非常复杂,因为您需要在NSNumber内找到正确的数字类型。

以下是执行此操作的一种方法:添加类别,并在实现中使用switch语句来调度objCType的值

@interface NSNumber (AbsoluteValue)

-(NSNumber*)abs;

@end

@implementation NSNumber (AbsoluteValue)

-(NSNumber*)abs {
    switch (self.objCType[0]) {
        // Cases below cover only signed types
      case 'c': return [NSNumber numberWithChar:abs([self charValue])];
      case 's': return [NSNumber numberWithShort:abs([self shortValue])];
      case 'i': return [NSNumber numberWithInt:abs([self intValue])];
      case 'q': return [NSNumber numberWithLongLong:llabs([self longLongValue])];
      case 'f': return [NSNumber numberWithFloat:fabsf([self floatValue])];
      case 'd': return [NSNumber numberWithDouble:fabs([self doubleValue])];
      // Otherwise, the number is of an unsigned type, so it can be returned directly
      default: return self;
    }
}

@end

您可以在数字为正数时返回self来优化此项。

答案 1 :(得分:2)

获得这样的绝对值:

number = [NSNumber numberWithDouble:fabs([number doubleValue])];