2009-08-13 28 views
0

嗯,它實際上是一個NSDecimalNumbers數組的總和我想獲得絕對值......我總是覺得我正在與所有的轉換戰鬥框架& typecasting是必需的...從double到NSNumber到NSDecimalNumber和back和...所有嘗試保持NSDecimalNumber提供的精度。以下工作,但有沒有一種更容易的方法,以避免所有這種轉換&類型鑄造?NSNumber的格式化絕對值

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

也許我可以改變NSNumberFormatter(currencyFormatter)忽略 - 符號?

回答

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訪問,那麼你應該在「模式值」結合進入在第一線的關鍵路徑給定的關鍵路徑。 使用這種方式,你可以刪除所有給定的三行:)