ios - 添加多个 NSDecimalNumbers

标签 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?我最终会将它们转换为货币字符串。

最佳答案

NSDecimalNumber 是一个不可变类。也就是说,一旦构建,实例就不会改变。消息 decimalNumberByAdding: 返回一个新数字。因此,您需要每次都记录新实例。以下代码应该可以工作。

NSDecimalNumber* baseNumber = [NSDecimalNumber zero];

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

NSLog(@"%@", baseNumber);

如果您不使用 ARC 并希望它在下一个自动释放池耗尽后继续运行,请记住保留 baseNumber

关于ios - 添加多个 NSDecimalNumbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709419/

相关文章:

iphone - 物理与图形相互争斗(box2d)

iOS:AVPlayer 显示黑屏并且无法播放某些 mp4 视频

ios - Cucumber - 在 Jenkins 中重新运行失败的测试

iphone - 在 UITableView 中创建运行总和

objective-c - NSDecimalNumber 的小数部分

ios - NSNumberFormatter 不接受小数点后的零

objective-c - iOS - 如何使用 UISlider 控制 UIBezierPath 绘图?

ios - TableViewController 和 NavigationBar

objective-c - DecimalNumberByAdding 如何工作?

ios - 使用 NSNumberFormatter 格式化 NSDecimalNumber 时丢失小数零