1

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

4

1 回答 1

7

简单的解决方案:您可以获取数字对象的浮点值并调用ceilf()or 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
于 2010-05-07T12:42:47.580 回答