添加多个NSDecimalNumbers

时间:2013-02-05 14:08:34

标签: ios nsdecimalnumber

这样做的最佳做法是什么:

我有一个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这是我正在使用的一批数字中的一个,它们总计为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?我最终将这些转换为货币字符串。

1 个答案:

答案 0 :(得分: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,并希望它在下一个自动释放池中消失。