adi*_*dit 34 iphone objective-c ipad ios
我怎样才能做到这一点?我尝试了abs(),但它只适用于int.有内置的方法吗?
CGFloat flo = -123;
abs(flo)
Run Code Online (Sandbox Code Playgroud)
这返回0
blu*_*yd8 70
使用fabs()
CGFloat f = -123.4f;
CGFloat g = fabs(f);
Run Code Online (Sandbox Code Playgroud)
CGFloat被定义为double在64位机器上,并float在32位机器上.如果您的目标是64位和32位,那么这个答案会变得更复杂,但仍然是正确的.
您想要使用,fabs()因为它适用于double大于的数据类型float.在32位上,如果你取a 或a的绝对值,则将(fabs()a是a double)的返回值分配给a CGFloat(a是a float)是正常的.如果您尝试存储大数字的绝对值,则可能会溢出32位.总之,64位是好的,对32位不混合和匹配,并和你会被罚款.CGFloatfloatCGFloatdoubledoubleCGFloat
该ABS()宏显然可以对一些编译器的副作用.
适用于64/32位系统
#if CGFLOAT_IS_DOUBLE
CGFloat g = fabs(flo);
#else
CGFloat g = fabsf(flo);
#endif
Run Code Online (Sandbox Code Playgroud)
我通常只使用ABS宏,据我所知,无论你使用哪个系统或使用哪个原语,它都能正常工作.
CGFloat x = -1.1;
double y = -2.1;
NSInteger z = -5;
x = ABS(x);
y = ABS(y);
z = ABS(z);
Run Code Online (Sandbox Code Playgroud)
小智 5
小补充:
CGFloat g = fabs(f);
Run Code Online (Sandbox Code Playgroud)
这将导致转换警告,因为fabs()返回一个double值.要获得浮点值,您需要使用fabsf().
CGFloat g = fabsf(f);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18265 次 |
| 最近记录: |