iphone - NS小数乘法

标签 iphone core-data

我有一个基于数据的核心应用程序,它存储 decimalfloat 数据类型的多个属性。我正在编写一些 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/

相关文章:

iphone - 自定义 accessoryView 中的 UISwitch

iPhone 垃圾桶吸动画

c# - iOS:UIBackgroundFetch - 未调用 PerformFetch

iphone - 可以使用 Apple 的 native css 拒绝应用程序吗?

objective-c - 如何检测核心数据关系的变化?

iphone - NSNumber 和 NSTimeInterval

objective-c - 为什么我的实体的 BOOL 类型的属性即使设置为 NO 也会返回 YES?

IOS 核心数据 - 查找或创建重复插入

ios - SwiftUI Preview 不适用于 FetchRequest 和 Init

ios - xCode 7.0 IOS9 SDK : deadlock while executing fetch request with performBlockAndWait