2012-07-19 70 views
1

我知道這種問題不應該被詢問。但是,我堅持了幾天沒有任何線索。所以,我真的需要幫助。NSDecimalNumber與NSDecimalNumber相乘返回0

我有一個核心數據對象,比方說,產品。

//產品
NSDecimalNumber *量
NSDecimalNumber *價格

我試圖做的是總結的價格,將其設置爲一個標籤。我在這裏搜索並發現了一些話題,說NSDecimalNumber不能執行標準的匹配操作,因爲它是一個包含實際值的對象。它必須通過decimalNumberByAddingdecimalNumberByMultiplyingBy。所以,我寫了下面的代碼,

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

確保你不乘以零。 NSLog在使用它們之前記錄你的初始值。 – 2012-07-19 11:27:59

回答

6

您沒有分配返回值。

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

應該是:

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

由於decimalNumberByAdding返回一個值,不自動更新該變量。因此,totalPrice始終爲0,這是您在init上分配的值。