地板加倍数小数

时间:2010-07-17 20:37:17

标签: iphone c objective-c double

我希望将小数位置加倍,小数位数可变(在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);
}

4 个答案:

答案 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;
}