将NSDecimalNumber与NSDecimalNumber相乘,返回0

时间:2012-07-19 11:25:07

标签: iphone objective-c ios

我知道不应该问这类问题。但是,我在这里坚持了几天没有任何线索。所以,我真的需要帮助。

我有一个核心数据对象,比如产品。

//产品
NSDecimalNumber *数量
NSDecimalNumber *价格

我要做的是总结价格并将其设置为标签。我在这里搜索并发现一些话题说NSDecimalNumber不能做标准匹配操作,因为它是一个包装实际值的对象。必须通过 decimalNumberByAdding decimalNumberByMultiplyingBy 来完成。所以,我写了下面的代码,

NSDecimalNumber *totalPrice = [[NSDecimalNumber alloc] initWithDouble:0.0];
[self.productArray enumerateObjectsUsingBlock:^(Product *product, NSUInteger idx, BOOL *stop) {
    [totalPrice decimalNumberByAdding:[product.price decimalNumberByMultiplyingBy:product.quantity]];
    NSLog(@"%@", totalPrice);
    NSLog(@"%@", totalPrice.doubleValue);
    NSLog(@"%@", totalPrice.decimalValue);
}];

这些NSLog都没有显示正确的结果。他们既没有显示0或NULL

但是,如果我NSLog下面的代码,可以显示正确的结果。

[product.price decimalNumberByMultiplyingBy:product.quantity]

你能帮我指出我在这里想念的是什么吗?

1 个答案:

答案 0 :(得分:6)

您没有指定返回值。

[totalPrice decimalNumberByAdding:[product.price decimalNumberByMultiplyingBy:product.quantity]];

应该是:

totalPrice = [totalPrice decimalNumberByAdding:[product.price decimalNumberByMultiplyingBy:product.quantity]];

由于decimalNumberByAdding返回一个值,因此不会自动更新变量。因此,totalPrice始终为0,这是您在init上分配的值。