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它与手头的任务有什么关系,即获取一个数字的绝对值?好的,我明白你的意思,谢谢你的解释。