用于NSDecimalNumber的ceilf和floorf等效方法

时间:2010-05-07 10:08:17

标签: cocoa cocoa-touch nsdecimalnumber

NSDecimalNumber类型的ceilf和floorf是否有等价的方法?我似乎找不到任何东西。

1 个答案:

答案 0 :(得分:7)

简单解决方案:您可以获取数字对象的浮点值并调用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