iphone ios objective-c ipad

iphone - tomando el valor absoluto de CGFloat



ios objective-c (4)

¿Cómo puedo hacer eso? Probé el abs () pero solo funciona para int. ¿Hay una forma de hacerlo?

CGFloat flo = -123; abs(flo)

esto devuelve 0


Normalmente solo uso el macro ABS, hasta donde puedo decir, funciona sin importar en qué sistema estás o qué primitivo estás usando.

CGFloat x = -1.1; double y = -2.1; NSInteger z = -5; x = ABS(x); y = ABS(y); z = ABS(z);


Para sistema de 64/32 bits

#if CGFLOAT_IS_DOUBLE CGFloat g = fabs(flo); #else CGFloat g = fabsf(flo); #endif


Pequeña adición:

CGFloat g = fabs(f);

Esto dará como resultado una advertencia de lanzamiento, porque fabs () devuelve un valor doble. Para recuperar un valor flotante, necesita usar fabsf ().

CGFloat g = fabsf(f);


Usar fabs ()

CGFloat f = -123.4f; CGFloat g = fabs(f);

CGFloat se define como un double en máquinas de 64 bits y float en máquinas de 32 bits. Si tiene como objetivo 64 y 32 bits, esta respuesta se vuelve más complicada, pero sigue siendo correcta.

Desea utilizar fabs() porque funciona en tipos de datos double que son más grandes que float . En 32 bits, asignar el valor de retorno de fabs() (que es un double ) a un CGFloat (que es un float ) está bien SOLO si está tomando el valor absoluto de un CGFloat o float . Es posible que desborde un CGFloat 32 bits si intenta almacenar el valor absoluto de un número double grande. En resumen, 64 bits está bien, y en 32 bits no se mezclan y combinan double y CGFloat y estarás bien.

La macro ABS() aparentemente puede tener efectos secundarios en algunos compiladores.