我有一个基于数据的核心应用程序,它存储 decimal
和 float
数据类型的多个属性。我正在编写一些 transient 属性/虚拟访问器来运行计算并返回一些派生数字,但我似乎无法让 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
,无论数据模型中指定的存储类型如何,那么为什么会出现这种情况以及如何使其工作?我在这里完全误解了这一点吗?
非常感谢!
最佳答案
您遇到了问题,因为 -decimalNumberByMultiplyingBy:
需要一个 NSDecimalNumber,但(我推测)您正在向它传递一个包含 float
或 的 NSNumber双倍
值(您的折扣百分比)。首先尝试构建一个 NSDecimalNumber:
- (NSDecimalNumber *)discountedPrice {
NSDecimalNumber *dec = [NSDecimalNumber decimalNumberWithDecimal:
[self.discountPercentage decimalValue]];
return ([self.orderCost decimalNumberByMultiplyingBy:dec]);
}
关于iphone - NS小数乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2455475/