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.