NSDecimal乘法

时间:2010-03-16 15:06:00

标签: iphone core-data

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

为什么这不起作用:

- (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,那么为什么会这样做,以及如何使其工作?我在这里完全误解了吗?

非常感谢!

1 个答案:

答案 0 :(得分:3)

你遇到了问题,因为-decimalNumberByMultiplyingBy:需要一个NSDecimalNumber,但是(我猜)你传给的是一个包含floatdouble值的NSNumber(你的折扣百分比) 。首先尝试构建NSDecimalNumber:

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