cocoa - NSDecimalNumber 的 ceilf 和 Floorf 等效方法

标签 cocoa cocoa-touch nsdecimalnumber

NSDecimalNumber 类型的 ceilf 和 Floorf 是否有等效方法?我好像没找到。

最佳答案

简单的解决方案:您可以获取数字对象的浮点值并调用ceilf()floorf():

ceilf([decimalNumber floatValue]);

否则,您可以使用-decimalNumberByRoundingAccordingToBehavior:方法。

首先,您需要为要使用的每种舍入模式实现 NSDecimalNumberBehaviors 协议(protocol):

@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

关于cocoa - NSDecimalNumber 的 ceilf 和 Floorf 等效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2787724/

相关文章:

iphone - 核心数据错误?

objective-c - iOS NSObject 在 block 中初始化后为零

iphone - 同时相乘3个NSDecimalNumber

objective-c - 将不同种类的项目共享到 NSSharingServicePicker?

objective-c - 限制 NSMetadataQuery 的范围

iphone - 当我为 UITableView 设置 rowHeight 时,单元格的高度不应该也改变吗?

Swift - 将两个 NSDecimal 数相乘

ios - 在保持准确性的同时将 double 转换为 NSDecimalNumber

cocoa - NSOpenPanel 的 swift 2.0 等效项

macos - 如何在 NSPersistentDocument 中预加载 Core Data 中的数据?