Existe-t-il des méthodes équivalentes pour ceilf et floorf pour le type NSDecimalNumber? Je n'arrivais pas à en trouver.méthodes équivalentes ceilf et floorf pour NSDecimalNumber
1
A
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
Je suis allé avec la deuxième option parce que la conversion à flotter (ou double) perd pr ecision. – rein