эквивалентные методы ceilf и floorf для NSDecimalNumber - PullRequest
1 голос
/ 07 мая 2010

Существуют ли эквивалентные методы для ceilf и floorf для типа NSDecimalNumber?Кажется, я не мог их найти.

1 Ответ

7 голосов
/ 07 мая 2010

Простое решение: Вы можете получить значение с плавающей запятой для числового объекта и вызвать ceilf() или floorf():

ceilf([decimalNumber floatValue]);

В противном случае вы можете использовать метод – decimalNumberByRoundingAccordingToBehavior:.

Сначала вам нужно будет реализовать протокол NSDecimalNumberBehaviors для каждого режима округления, который вы хотите использовать:

@interface DecimalRounder : NSObject <NSDecimalNumberBehaviors> { }
@end

@implementation DecimalRounder

- (NSRoundingMode)roundingMode {
    return NSRoundUp;
}

- (short)scale {
    return 0;
}

@end

А затем (при условии, что ваше десятичное число равно 12,5):

DecimalRounder *rounder = [[DecimalRounder alloc] init];
NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithFloat:12.5];
NSDecimalNumber *roundedNumber = [decimalNumber decimalNumberByRoundingAccordingToBehavior:rounder];
NSLog(@"decimalNumber: %@", decimalNumber);
NSLog(@"roundedNumber: %@", roundedNumber);

Вы получите:

decimalNumber: 12.5
roundedNumber: 13
...