Круглое деление на верхнее целое - PullRequest
1 голос
/ 05 июля 2010

Есть ли простой способ округлить результат деления до верхнего целого числа?

Я хотел бы иметь это:

18/20 -> 1
19/20 -> 1
20/20 -> 1
21/20 -> 2
22/20 -> 2
23/20 -> 2

... и так далее ...

38/20 -> 2
39/20 -> 2
40/20 -> 2
41/20 -> 3
42/20 -> 3
43/20 -> 3

Должен ли я работать с NSNumberFormatter?

Мне не удалось получить целочисленное значение и выполнить целочисленное сравнение.

Спасибо зазаранее!

Ответы [ 4 ]

2 голосов
/ 05 июля 2010
int x, y;
int result = (x + (y-1)) / y;

тестирование:

    int n = 20;
    for (int i = 1; i <= 50; i++) {         
        NSLog(@"%d+(%d-1) / %d = %d", i, n, n, (i+(n-1))/n);
    }
2 голосов
/ 05 июля 2010

Вы используете стандартные функции ceil() и ceilf(), доступные в math.h

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

NSNumberFormatter используется при преобразовании чисел в строки. В дополнение к уже упомянутым функциям c примитивов вы можете использовать NSDecimalNumber и NSDecimalNumberHandler для выполнения вычисления и округления заданных экземпляров NSNumber. В случае сомнений обращайтесь к документации. Руководство по программированию чисел и значений

Пример кода для деления, округления до следующего целого числа и отображения результата.

NSDecimalNumber *denominator = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInteger:20] decimalValue]];

NSDecimalNumberHandler *numberHandler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];

for (NSInteger counter = 1; counter <= 50; counter++) {

    NSDecimalNumber *numerator = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInteger:counter] decimalValue]];

    NSDecimalNumber *result = [[numerator decimalNumberByDividingBy:denominator withBehavior:numberHandler] retain];

    NSLog(@"%@/%@ -> %d", numerator, denominator, [result integerValue]);

    [result release];
}
0 голосов
/ 05 июля 2010

Стандартный C поддерживает double ceil(double x) и long double ceill(long double x).Возможно, iPhone есть в наличии?Если ваши данные в первую очередь в целых числах, то вам нужно либо найти хитрый трюк, либо сначала конвертировать ваши целые числа в двойные.

...