格式化NSNumber的绝对值

时间:2009-08-13 23:07:32

标签: objective-c cocoa cocoa-touch nsnumber nsdecimalnumber

嗯,它实际上是一个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)来忽略 - 符号?

1 个答案:

答案 0 :(得分:1)

你不需要输入类型。

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

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

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