NSDecimalNumber 的 ceilf 和 Floorf 等效方法

发布于 2024-09-01 04:34:17 字数 61 浏览 2 评论 0原文

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

Are there equivalent methods for ceilf and floorf for the NSDecimalNumber type? I couldn't seem to find any.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怎樣才叫好 2024-09-08 04:34:17

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

Simple solution: You can get the float value of the number object and call ceilf() or floorf():

ceilf([decimalNumber floatValue]);

Otherwise, you can use the – decimalNumberByRoundingAccordingToBehavior: method.

First you'll need to implement the NSDecimalNumberBehaviors protocol for each rounding mode you want to use:

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

@implementation DecimalRounder

- (NSRoundingMode)roundingMode {
    return NSRoundUp;
}

- (short)scale {
    return 0;
}

@end

And then (assuming your decimal number is 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);

You'll get:

decimalNumber: 12.5
roundedNumber: 13
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文