2010-03-16 55 views
2

我有一个核心的基于数据的应用程序,它在decimalfloat数据类型中存储了几个属性。我正在写一些运行计算并返回一些派生数字的瞬态属性/虚拟访问器,但似乎无法使NSDecimalNumber乘法运行。NSDecimal乘法

为什么这个不行:

- (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 ... 

当这样做:

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

我认为我的目标从核心数据得到一个NSNumber无论在数据模型中指定的存储类型,那么为什么这个呕吐物,我怎么才能使它工作?我完全误解了这里吗?

非常感谢!

回答

3

你遇到了问题,因为-decimalNumberByMultiplyingBy:期待一个NSDecimalNumber,但(我相信)你传递它包含floatdouble值(你的折扣百分比)一个NSNumber。先尝试建立一个NSDecimalNumber:

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