【发布时间】:2011-06-10 15:56:54
【问题描述】:
如何在 Objective-C 中将负数转换为绝对值?
即
-10
变成
10?
【问题讨论】:
-
@SalvadorDali:SO 没有错;这个问题没有费力,也没有遵循 SO 指导方针,而答案是深入而正确的。
标签: objective-c
如何在 Objective-C 中将负数转换为绝对值?
即
-10
变成
10?
【问题讨论】:
标签: objective-c
你可以使用这个函数来获取绝对值:
+(NSNumber *)absoluteValue:(NSNumber *)input {
return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
【讨论】:
根据变量的类型,abs(int)、labs(long)、llabs(long long)、imaxabs(intmax_t)、fabsf(float)、fabs(double) 或 fabsl(long double) 之一。
这些函数都是 C 标准库的一部分,因此存在于 Objective-C 和普通 C 中(并且通常在 C++ 程序中也可用。)
(唉,没有habs(short) 功能。或者scabs(signed char) 就此而言......)
Apple 和 GNU 的 Objective-C 标头还包括一个与类型无关的 ABS() 宏。我不推荐使用ABS(),但是因为它不能保证副作用安全。例如,ABS(a++) 将产生未定义的结果。
如果您使用的是 C++ 或 Objective-C++,则可以引入 <cmath> 标头并使用 std::abs(),该模板针对所有标准整数和浮点类型进行了模板化。
【讨论】:
ABS() 并不是对所有编译器都安全,所以我不推荐使用它。
extern float fabsf(float); extern double fabs(double);