在Objective-C中转换为绝对值


187

如何在Objective-C中将负数转换为绝对值?

-10

变成

10个?


3
@SalvadorDali:SO没什么问题;这个问题没有花力气,也没有遵循SO准则,而答案是深入而正确的。
Josue Espinosa 2013年

Answers:


458

根据您的变量的类型,一abs(int)labs(long)llabs(long long)imaxabs(intmax_t)fabsf(float)fabs(double),或fabsl(long double)

这些功能都是C标准库的一部分,因此在Objective-C和普通C中都存在(并且通常在C ++程序中也可用)。

(A,没有habs(short)功能。或者scabs(signed char)那个问题……)


苹果和GNU的Objective-C标头还包含一个ABS()与类型无关的宏。但我不建议您使用ABS()它,因为它不能保证副作用安全。例如,ABS(a++)将有未定义的结果。


如果您使用的是C ++或Objective-C ++,则可以引入<cmath>标头并使用std::abs(),它是所有标准整数和浮点类型的模板。


33
或者,您可以使用适用于任何数字类型的ABS宏。
ughoavgfhw 2011年

1
但是,@ ugsomethingsomething ABS()并非在所有编译器上都是副作用安全的,这就是为什么我不建议使用它的原因。
乔纳森·格林斯潘

实际上是:fabsf(double)fabs(float)
Alex

@Alex不,这些是math.h中的定义:extern float fabsf(float); extern double fabs(double);
Gobe

3

您可以使用此函数来获取绝对值:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.