地板加倍数小数点

我希望将其小数位于可变小数位的二进制位置(在iphone sdk中)。

这里有一些例子向你展示我的意思

NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:2); // should return 34.52 NSLog(@"%f",[self floorMyNumber:34.52662 toPlace:2); // should return 34.52 NSLog(@"%f",[self floorMyNumber:34.52432 toPlace:3); // should return 34.524 NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:3); // should return 34.524 NSLog(@"%f",[self floorMyNumber:34.12462 toPlace:0); // should return 34.0 NSLog(@"%f",[self floorMyNumber:34.92462 toPlace:0); // should return 34.0 

任何想法如何做到这一点?

 -(double)floorNumberByDecimalPlace:(float)number place:(int)place { return (double)((unsigned int)(number * (double)pow(10.0,(double)place))) / (double)pow(10.0,(double)place); } 

另一种方案:

放置是10(例如:13.1),100(例如:12.31)等等

double value =(double)((unsigned int)(value *(double)放置))/(double)放置

如果您只是将它们四舍五入以进行打印,则可以使用标准的printf格式说明符进行。 例如,要打印3位小数而不是“%f”,您可以使用“%。3f”

使用sprintf(或更好的snprintf)将其格式化为字符串然后裁剪字符串的结尾。

将它乘以10 ^(小数位),将其转换为整数,然后除以10 ^(小数位)。

 double floorToPlace(double number, int places) { int decimalPlaces = 1; for (int i = 0; i < places; i++) divideBy *= 10; return (int)(number * decimalPlaces) / (double)decimalPlaces; }