Converter em valor absoluto em Objective-C

187

Como converter um número negativo em um valor absoluto em Objective-C?

ie

-10

torna-se

10?

conservatório
fonte
3
@SalvadorDali: Não há nada errado com o SO; a pergunta não exigiu esforço e não segue as diretrizes da SO, enquanto a resposta é detalhada e correta.
Josue Espinosa

Respostas:

458

Dependendo do tipo da sua variável, um dos abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), ou fabsl(long double).

Essas funções fazem parte da biblioteca padrão C e, portanto, estão presentes no Objective-C e no C simples (e geralmente também estão disponíveis nos programas C ++).

(Infelizmente, não há habs(short)função. Ou, scabs(signed char)nesse caso ...)


Os cabeçalhos Objective-C da Apple e do GNU também incluem uma ABS()macro independente do tipo. No ABS()entanto, não recomendo o uso, pois não é garantido que seja seguro contra efeitos colaterais. Por exemplo, ABS(a++)terá um resultado indefinido.


Se você estiver usando C ++ ou Objective-C ++, poderá trazer o <cmath>cabeçalho e usá-lo std::abs(), que é modelado para todos os tipos de número inteiro e ponto flutuante padrão.

Jonathan Grynspan
fonte
33
Ou você pode usar a macro ABS, que funciona em qualquer tipo de número.
precisa saber é o seguinte
1
Porém, @ugsomethingsomething ABS()não é seguro para todos os compiladores, e é por isso que não recomendo usá-lo.
22611 Jonathan Grynspan
É realmente: fabsf (duplo) fabs (float)
Alex
@Alex não, estas são as definições em math.h::extern float fabsf(float); extern double fabs(double);
Gobe
3

Você pode usar esta função para obter o valor absoluto:

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