2010-12-10 52 views
0

我有這些數字格式:數字格式與NSNumberFormatter已經有小數和千個分隔符

100000,459 
100000459 
100.000 
100.000,59 
100.000.000,39 

數字變成爲用戶輸入的值給它。對於每個增加的值,我需要使用NSNumberFormatter重新格式化數字。問題是這個數字已經有了。並且格式化程序似乎沒有正確處理這些內容。它是這樣出現的:

100 000,00 
100 000 459,00 
100,00 
100,00 
100,00 

例如,我想100000459變成100000459。

我現在使用的代碼:

NSNumber *amount = [NSNumber numberWithInt:[string intValue]]; 
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nb_NO"]; 
[currencyFormatter setLocale:locale]; 
NSString *commaString = [currencyFormatter stringForObjectValue:amount]; 

如何I格式已經格式化的數字?

回答

1

在最後一行中,您試圖格式化字符串而不是數字。試試這個:

NSString *commaString = [currencyFormatter stringFromNumber:amount]; 

這是good reference

+0

感謝您的回覆!不幸的是它對結果沒有任何影響。仍然錯誤。 – doh 2010-12-10 11:28:32

0

我已經看過那個具體的參考。它不同於我的問題,因爲在我的情況下,格式化時可能已經有小數。

0

NSNumberFormatter格式a 數字爲一個字符串表示形式,它需要正確的數字表示形式才能夠按預期格式化。通過你的代碼示例的外觀,你提供了一個整數值的格式化程序,這就是爲什麼你得到你所得到的輸出。用string = @"100000,459"[string intValue]給你100000。這就是格式化程序的輸出爲100 000,00的原因。

你需要做的是首先將字符串轉換爲雙重表示。這可以通過使用NSScanner來實現。您只需確保您掃描正確的語言環境中的數字,以便正確檢測到千分隔符。

NSScanner *scanner = [NSScanner scannerWithString:@"100000,459"]; 
[scanner setLocale:locale]; 
double val; 
[scanner scanDouble:&val]; 
NSNumber *amount = [NSNumber numberWithDouble:val]; 

如何妥善處理千個分隔符,我不知道:你的第一個字符串可以通過轉換爲雙。