2010-03-16 6 views
2

J'ai une application basée sur les données de base qui stocke plusieurs propriétés dans les types de données decimal et float. J'écris quelques propriétés transitoires/accesseurs virtuels qui exécutent des calculs et retournent des nombres dérivés, mais je n'arrive pas à obtenir la multiplication NSDecimalNumber pour fonctionner.Multiplication NSDecimal

Pourquoi ça marche pas:

- (NSDecimalNumber *)discountedPrice { 
return ([self.orderCost decimalNumberByMultiplyingBy:self.discountPercentage]); 
} 
// Error: Incompatible Objective-C types 'struct NSNumber *', expected 'struct NSDecimalNumber *' when passing argument 1 of 'decimalNumberByMultiplyingBy:' from distinct ... 

Lorsque cela se fait:

- (NSDecimalNumber *)orderCost { 
    return ([self.orderCost decimalNumberByAdding:self.taxes]); 
} 

Je suppose que mon objet obtient une NSNumber à partir des données de base quel que soit le type de stockage spécifié dans le modèle de données, alors pourquoi ce vomi et comment puis-je le faire fonctionner? Suis-je complètement mal compris ici?

Merci beaucoup!

Répondre

3

Vous êtes en cours d'exécution dans des problèmes parce que -decimalNumberByMultiplyingBy: attend un NSDecimalNumber, mais (je suppose) que vous êtes faisant passer un NSNumber contenant une valeur float ou double (votre pourcentage de réduction). Essayez de créer un NSDecimalNumber en premier:

- (NSDecimalNumber *)discountedPrice { 
    NSDecimalNumber *dec = [NSDecimalNumber decimalNumberWithDecimal: 
           [self.discountPercentage decimalValue]]; 
    return ([self.orderCost decimalNumberByMultiplyingBy:dec]); 
}