有人能告诉我使NSNumber为阴性的最有效方法吗?
答案 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])];