2010-05-07 3 views

Répondre

7

solution simple: Vous pouvez obtenir la valeur de l'objet flottant de numéro et appeler ceilf() ou floorf():

ceilf([decimalNumber floatValue]); 

Sinon, vous pouvez utiliser la méthode – decimalNumberByRoundingAccordingToBehavior:.

D'abord, vous aurez besoin de mettre en œuvre le protocole NSDecimalNumberBehaviors pour chaque mode d'arrondi que vous souhaitez utiliser:

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

@implementation DecimalRounder 

- (NSRoundingMode)roundingMode { 
    return NSRoundUp; 
} 

- (short)scale { 
    return 0; 
} 

@end 

Et puis (en supposant que votre nombre décimal est 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); 

Vous » Je vais:

decimalNumber: 12.5 
roundedNumber: 13 
+2

Je suis allé avec la deuxième option parce que la conversion à flotter (ou double) perd pr ecision. – rein

Questions connexes