этаж двойной десятичной точки - PullRequest
2 голосов
/ 18 июля 2010

Я хочу получить двойное число по десятичному знаку с переменной десятичной длиной (в 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 ]

1 голос
/ 18 июля 2010

Другое решение:

- это 10 (пример: 13.1), 100 (пример: 12.31) и т. Д.

double value = (double) ((unsigned int) (value *)(двойной) размещенный)) / (двойной) размещенный

0 голосов
/ 18 июля 2010

Умножьте его на 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;
}
0 голосов
/ 18 июля 2010

Используйте sprintf (или лучше snprintf), чтобы отформатировать его в строку, а затем обрезать конец строки.

0 голосов
/ 18 июля 2010

Если вы просто округляете их для печати, вы делаете это со стандартными спецификаторами формата printf.Например, вместо «% f» для печати 3 десятичных знаков можно использовать «% .3f»

...