как округлить NSNumber и создать серию чисел в объекте C - PullRequest
0 голосов
/ 15 августа 2011

Могу ли я узнать, как округлить NSNumber в объекте C?

for(int i=6; i>=0; i--) 
{
    DayOfDrinks *drinksOnDay = [appDelegate.drinksOnDayArray objectAtIndex:i];

    NSString * dayString= [NSDate stringForDisplayFromDateForChart:drinksOnDay.dateConsumed];

    [dayArray addObject:dayString];//X label for graph the day of drink.

    drinksOnDay.isDetailViewHydrated = NO;

    [drinksOnDay hydrateDetailViewData];

    NSNumber *sdNumber =  drinksOnDay.standardDrinks;
    [sdArray addObject: sdNumber];      
}

внутри этого sdArray находятся все числа, подобные этим 2.1, 1.3, 4.7, 3.1, 4.8, 15.1, 7.2;

Мне нужно построить график оси Y, поэтому мне нужно показать строку из NSNumber, чтобы показать NSString этого {@ "0", @ "2", @ "4", @ "6", @ "8", @ "10", @ "12", @ "14", @ "16"} , так как мне нужно начать с нуля, мне нужно определить, какое значение является наибольшим. в этом случае будет 15,1, чтобы показать 16 на графике. вместо статической маркировки я хотел бы сделать динамическую маркировку.

enter image description here на графике вы видите статическую нумерацию, а не динамическую.

Извините, что пропустил важную информацию.

спасибо за все комментарии

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Посмотрите математические функции в math.h, там есть что-то хорошее, например,

extern double round ( double );
extern float roundf ( float );

Что касается остальной части вашего вопроса, вам, вероятно, придется разбирать ваши строки на числа, выполнять любые действия с ними (округление, сортировка и т. Д.), А затем помещать их обратно в строки.

1 голос
/ 15 августа 2011

Ваше редактирование теперь имеет гораздо больше смысла. Вот пример получения всех четных чисел от вашего 0 до максимального значения в ваших NSArray из NSNumber s (при условии, что все значения положительные, можно изменить их на поддержку отрицательных значений, также найдя минимальное значение с плавающей запятой). 1003 *

NSArray *sdArray = [NSArray arrayWithObjects:
                    [NSNumber numberWithFloat:2.1],
                    [NSNumber numberWithFloat:1.3],
                    [NSNumber numberWithFloat:4.7],
                    [NSNumber numberWithFloat:3.1],
                    [NSNumber numberWithFloat:4.8],
                    [NSNumber numberWithFloat:15.1],
                    [NSNumber numberWithFloat:7.2],
                    nil];

//Get max value using KVC
float fmax = [[sdArray valueForKeyPath:@"@max.floatValue"] floatValue];

//Ceiling the max value
int imax = (int)ceilf(fmax);

//Odd check to make even by checking right most bit
imax = (imax & 0x1) ? imax + 1 : imax;

NSMutableArray *array = [NSMutableArray arrayWithCapacity:(imax / 2) + 1];
//Assuming all numbers are positive 
//(should probably just use unsigned int for imax and i)
for(int i = 0; i <= imax; i +=2)
{
    [array addObject:[NSString stringWithFormat:@"%d", i]];
}

NSLog(@"%@", array);
...