2013-02-28 60 views
0

我有一個字符串名爲valuesArray含值這樣的數組:2913451.0938NSString的的轉換陣列格式化的NSNumbers的陣列

我試圖格式化這些數字,這樣我可以這樣顯示出來:2,913,451.09

使用下面的代碼我能夠讀取數組中的值並將它們轉換爲NSNumbers(num),並且我也能夠創建一個格式化程序來定義我希望如何顯示我的數字(formatter)。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 

NSNumber *num = valuesArray[indexPath.row]; 
NSLog(@"num: %@",num); 
NSLog(@"Formatter: %@",formatter); 
NSString *forNum = [formatter stringFromNumber:num]; 
NSLog(@"FormattedNum: %@",forNum); 

當我運行的代碼,並獲得了線NSLog(@"FormattedNum: %@",forNum);我看到它打印null。我錯過了什麼?

+0

什麼'num'和'formatter'打印? – 2013-02-28 16:06:13

+0

@NikolaiRuhe'num:12553726.204939000000000','Formatter:''和'FormattedNum:(null)' – 2013-02-28 16:10:02

回答

1

代碼中的問題在於,您從字符串valueArray數組中檢索到一個元素,但將其分配給NSNumber類型變量 - 而對象確實是NSString。當你將它傳遞給格式化程序時,它會返回nil(即使它也可能會崩潰,但這只是未定義的行爲)。

您必須將字符串轉換爲NSNumber

NSNumber *num = @([valuesArray[indexPath.row] doubleValue]); 
0

我只是檢查這個代碼與此值:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 

NSNumber *num = @(2913451.0938); 

NSLog(@"num: %@",num); 
NSLog(@"Formatter: %@",formatter); 
NSString *forNum = [formatter stringFromNumber:num]; 
NSLog(@"FormattedNum: %@",forNum); 

它工作得很好,沒有任何錯誤,以便以往一樣你所提到的。

參見輸出:

2013-02-28 21:35:44.417 BrowserModal[4861:403] num: 2913451.0938 
2013-02-28 21:35:44.418 BrowserModal[4861:403] Formatter: <NSNumberFormatter: 0x100160840> 
2013-02-28 21:35:44.419 BrowserModal[4861:403] FormattedNum: 29,13,451.09 

請清潔你的目標和重新構建。

而且

確保valuesArray[indexPath.row]回報盒裝NSNumber對象。

做爲:@([valuesArray [indexPath.row] doubleValue]);

+0

你是什麼意思由一個盒裝的'NSNumber'對象? – 2013-02-28 16:13:55

+1

使用'@([valuesArray [indexPath.row] doubleValue]);' – 2013-02-28 16:28:21

+0

我錯過了比nikolai更早的​​答案,我去吃晚飯然後你問你的問題,我badluck :( – 2013-02-28 16:39:23