0

嗯,它实际上是一个 NSDecimalNumbers 数组的总和,我想得到它的绝对值......我一直觉得我正在与框架进行所有所需的转换和类型转换......从 double 到 NSNumber到 NSDecimalNumber 并返回......所有同时试图保持 NSDecimalNumber 提供的精度。以下方法有效,但有没有更简单的方法可以避免所有这些转换和类型转换?

NSNumber *totalAmt = [customObjectArray valueForKeyPath:@"@sum.decimalNumberValue"];
NSString *totalAmtString = [currencyFormatter stringFromNumber:[NSNumber numberWithDouble:fabs([totalAmt doubleValue])]];
sectionLabel.text = [NSString stringWithFormat:@"Total: %@", totalAmtString];

也许我可以更改 NSNumberFormatter (currencyFormatter) 以忽略 - 符号?

4

1 回答 1

1

你不需要类型转换。

NSNumber *totalAmt = [customObjectArray valueForKeyPath:@"@sum.decimalNumberValue"];
NSString *totalAmtString = [currencyFormatter stringFromNumber:totalAmt];
sectionLabel.text = [NSString stringWithFormat:@"Total: %@", totalAmtString];

这可以正常工作,因为 NSDecimalNumber 是 NSNumber 的子类。

如果sectionLabel是您在 IB 中绑定的东西,请尝试将值绑定totalAmt到“模式值”而不是sectionLabel“值”。这将保存最后一行:) 如果customObjectArray您可以通过 访问某些内容NSArrayController,那么您应该在第一行输入给定的密钥路径作为“模式值”绑定中的密钥路径。使用这种方式,您可以删除所有给定的三行:)

于 2009-08-15T08:36:25.337 回答