【问题标题】:Convert to absolute value in Objective-C在 Objective-C 中转换为绝对值
【发布时间】:2011-06-10 15:56:54
【问题描述】:

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

-10

变成

10?

【问题讨论】:

  • @SalvadorDali:SO 没有错;这个问题没有费力,也没有遵循 SO 指导方针,而答案是深入而正确的。

标签: objective-c


【解决方案1】:

你可以使用这个函数来获取绝对值:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}

【讨论】:

    【解决方案2】:

    根据变量的类型,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 宏,它适用于任何数字类型。
    • @ugsomethingsomething ABS() 并不是对所有编译器都安全,所以我不推荐使用它。
    • 其实是:fabsf(double) fabs(float)
    • @Alex 不,这些是 math.h 中的定义:extern float fabsf(float); extern double fabs(double);
    猜你喜欢
    • 2014-08-01
    • 2010-12-19
    • 1970-01-01
    • 2010-10-16
    • 2011-07-05
    • 2011-02-12
    • 1970-01-01
    • 2011-09-18
    • 2020-10-26
    相关资源
    最近更新 更多