转自:http://blog.sina.com.cn/s/blog_6cc3d7570100lpi9.html
在实际工作中有些程序不可避免的需要使用数学函数进行计算,比如地图程序的地理坐标到地图坐标的变换。Objective-C做为ANSI C的扩展,使用C标准库头文件<math.h>中定义的数学常量宏及数学函数来实现基本的数学计算操作,所以不必费神再在Cocoa Foundation中寻找相应的函数和类了。这里列出一些常用宏和数学函数,更详细的信息还是需要去查阅<math.h>头文件。
数学常量:
#define M_E
#define M_LOG2E
#define M_LOG10E
#define M_LN2
#define M_LN10
#define M_PI
#define M_PI_2
#define M_PI_4
#define M_1_PI
#define M_2_PI
#define M_2_SQRTPI
#define M_SQRT2
#define M_SQRT1_2
常用函数:
//指数运算
NSLog(@"%.f", pow(3,2) ); //result 9
NSLog(@"%.f", pow(3,3) ); //result 27
//开平方运算
NSLog(@"%.f", sqrt(16) ); //result 4
NSLog(@"%.f", sqrt(81) ); //result 9
//上舍入
NSLog(@"res: %.f", ceil(3.000000000001)); //result 4
NSLog(@"res: %.f", ceil(3.00)); //result 3
//下舍入
NSLog(@"res: %.f", floor(3.000000000001)); //result 3
NSLog(@"res: %.f", floor(3.9999999)); //result 3
//四舍五入
NSLog(@"res: %.f", round(3.5)); //result 4
NSLog(@"res: %.f", round(3.46)); //result 3
NSLog(@"res: %.f", round(-3.5)); //NB: this one returns -4
//最小值
NSLog(@"res: %.f", fmin(5,10)); //result 5
//最大值
NSLog(@"res: %.f", fmax(5,10)); //result 10
//绝对值
NSLog(@"res: %.f", fabs(10)); //result 10
NSLog(@"res: %.f", fabs(-10)); //result 10
这里没有列出的三角函数也是属于C标准数学函数的一部分,也可以在<math.h>中查阅。
程序中的运用:
+(NSString*) formatDataSizeDisplay:(NSInteger) dataSize { //NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init]; NSString *display = @"0B"; NSLog(@"data is : %f",dataSize*1.000f); NSLog(@"result is : %f",(dataSize*1.000f)/(1000*1.000f)); NSLog(@"data is : %@",[NSString stringWithFormat:@"%.2fKB", ((dataSize*1.000f)/(1000*1.000f))]); NSLog(@"data is : %@",[NSString stringWithFormat:@"%.2fKB", (100.897f)]); if (dataSize >= 0 && dataSize < 1000) { display = [NSString stringWithFormat:@"%dB", dataSize]; }else if(dataSize >= 1000 && dataSize < (1000*1000) ){ display = [NSString stringWithFormat:@"%.1fKB", ((dataSize*1.000f)/(1000*1.000f))]; }else if(dataSize >= (1000 * 1000) && dataSize < (1000*1000*1000)){ display = [NSString stringWithFormat:@"%.1fMB", ((dataSize*1.000f)/(1000*1000*1.000f))]; }else if(dataSize >= (1000 * 1000 * 1000) && dataSize <(1000 * 1000 * 1000 *1000)){ display = [NSString stringWithFormat:@"%.1fGB", ((dataSize*1.000f)/(1000*1000*1000*1.000f))]; } NSLog(@"data is : %@",display); return [display retain]; }