代码之家  ›  专栏  ›  技术社区  ›  rein

小数的ceilf和floorf等价方法

  •  1
  • rein  · 技术社区  · 16 年前

    对于NSDecimalNumber类型,ceilf和floorf是否有等效的方法?我好像找不到。

    1 回复  |  直到 16 年前
        1
  •  7
  •   fjoachim    16 年前

    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
    
    推荐文章