我有一个基于核心数据的应用,可以在decimal
和float
数据类型中存储多个属性。我正在编写一些运行计算并返回一些派生数字的瞬态属性/虚拟访问器,但我似乎无法使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
,那么为什么会这样做,以及如何使其工作?我在这里完全误解了吗?
非常感谢!
答案 0 :(得分:3)
你遇到了问题,因为-decimalNumberByMultiplyingBy:
需要一个NSDecimalNumber,但是(我猜)你传给的是一个包含float
或double
值的NSNumber(你的折扣百分比) 。首先尝试构建NSDecimalNumber:
- (NSDecimalNumber *)discountedPrice {
NSDecimalNumber *dec = [NSDecimalNumber decimalNumberWithDecimal:
[self.discountPercentage decimalValue]];
return ([self.orderCost decimalNumberByMultiplyingBy:dec]);
}