Ios 倒负数

Ios 倒负数,ios,nsnumber,Ios,Nsnumber,有谁能告诉我使负数为正数的最有效方法吗?得到这样的绝对值: number = [NSNumber numberWithDouble:fabs([number doubleValue])]; 得到这样的绝对值: number = [NSNumber numberWithDouble:fabs([number doubleValue])]; 一般来说,这样做非常复杂,因为您需要在NSNumber中找到正确的数字类型 这里有一种方法:添加一个类别,并在实现中使用switch语句分派objCType

有谁能告诉我使负数为正数的最有效方法吗?

得到这样的绝对值:

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

得到这样的绝对值:

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

一般来说,这样做非常复杂,因为您需要在
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
来优化此操作。

通常这样做非常复杂,因为您需要找出
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
对其进行优化。

NSNumber本身不是一个数字,您可以使用
ABS
获取其任何数字表示的绝对值。此问题可能重复:@emililessard这不是重复,虽然另一个问题肯定解释了如何做这一部分。你知道
NSNumber
从何而来吗?NSNumber本身不是一个数字,你可以使用
ABS
获得其任何数字表示的绝对值。这个问题可能重复:@emililessard这不是重复,尽管另一个问题肯定解释了如何做这一部分。你知道
NSNumber
从哪里来吗?得到了这个:不兼容的整数转换指针将'NSNumber*'传递给'int'类型的参数,除了你可能有一个十进制值。得到了这个:不兼容的整数转换指针传递“NSNumber*”转换为“int”类型的参数,除非您可能有一个十进制值。除非您永远不应该依赖于
NSNumber
objCType
@a-Live,否则我很好奇这种分类判断的起源。你能详细说明一下吗?因为,例如,
BOOL
值可能被保存为
char
@A-Live它与手头的任务有什么关系,即获取一个数字的绝对值?好的,我明白你的意思,谢谢你的解释。除非你永远不要依赖于
NSNumber
objCType
@A-Live,否则我很好奇这种绝对判断的起源。你能详细说明一下吗?因为,例如,
BOOL
值可能被保存为
char
@A-Live它与手头的任务有什么关系,即获取一个数字的绝对值?好的,我明白你的意思,谢谢你的解释。