1

この種の質問をするべきではないことはわかっています。しかし、私は何の手がかりもなくここに何日も立ち往生していました. だから、私は本当に助けが必要です。

コアデータオブジェクト、たとえば製品があります。

// 製品
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]

ここで私が見逃していることを指摘してもらえますか?

4

1 に答える 1

6

戻り値を割り当てていません。

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

する必要があります:

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

decimalNumberByAddingは値を返すため、変数を自動的に更新しません。そのため、totalPriceは常に0であり、これがinitで割り当てた値です。

于 2012-07-19T11:35:20.500 に答える