1

これを行うためのベストプラクティスは何ですか:

NSDecimalNumbersの配列があり、それらをすべて一緒に追加する必要があります。

基数を設定してから、ループして後続の各番号を基数に追加します...次のようなものです。

 NSDecimalNumber* baseNumber = [[NSDecimalNumber alloc] initWithString:[NSString stringWithFormat:@"%f", 0.0]];

    for(int i=0; i<itemsToAdd.count; i++) {
        NSDecimalNumber* thisNumber = [itemsToAdd objectAtIndex:i];
        [baseNumber decimalNumberByAdding:thisNumber];
    }

NSLog(@"%@", baseNumber);

しかし、私は合計で0を取得し続けます。baseNumberが増えると思いました。明らかにそうではありません。:Dこれが私が扱っている数字のバッチの1つで、合計で81649.64になります。

2013-02-05 08:58:50.833 EUS Calculator[37430:c07] 4905.6
2013-02-05 08:58:50.834 EUS Calculator[37430:c07] 13850.88
2013-02-05 08:58:50.834 EUS Calculator[37430:c07] 43246.08
2013-02-05 08:58:50.835 EUS Calculator[37430:c07] 19944.96
2013-02-05 08:58:50.835 EUS Calculator[37430:c07] 412.8
2013-02-05 08:58:50.835 EUS Calculator[37430:c07] 289.92
2013-02-05 08:58:50.836 EUS Calculator[37430:c07] 0

NSDecimalNumbersのバッチを追加するにはどうすればよいですか?最終的にこれらを通貨文字列に変換します。

4

1 に答える 1

1

NSDecimalNumber不変クラスです。つまり、一度構築されると、インスタンスは変更されません。メッセージdecimalNumberByAdding:は新しい番号を返します。そのため、毎回新しいインスタンスを記録する必要があります。次のコードは機能するはずです。

NSDecimalNumber* baseNumber = [NSDecimalNumber zero];

for (int i = 0; i < itemsToAdd.count; i++)
{
    baseNumber = [baseNumber decimalNumberByAdding:[itemsToAdd objectAtIndex:i]];
}

NSLog(@"%@", baseNumber);

ARC を使用しておらず、次の自動解放プールのドレインを超えて使用したい場合はretain、覚えておいてください。baseNumber

于 2013-02-05T14:12:33.127 に答える