我希望将小数位置加倍,小数位数可变(在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);
}
答案 0 :(得分:1)
另一种解决方案:
放置是10(例如:13.1),100(例如:12.31)等等
double value =(double)((unsigned int)(value *(double)放置))/(double)放置
答案 1 :(得分:0)
如果您只是将它们四舍五入以进行打印,则可以使用标准的printf格式说明符进行。例如,要打印3位小数而不是“%f”,您可以使用“%。3f”
答案 2 :(得分:0)
使用sprintf(或更好的snprintf)将其格式化为字符串,然后裁剪字符串的结尾。
答案 3 :(得分:0)
将它乘以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;
}