2011-10-26 45 views
4

我必須錯過一些明顯的東西,但由於我在這方面失去了太多時間,我會讓專家看看。我只想得到一個格式正確的字符串,但貨幣符號給我一個問題:當我只需要符號時,它使用某種國際代碼。

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setCurrencyCode:currencyCode]; 
[formatter setPositiveFormat:@"#,##0.00 ¤"]; 
[formatter setNegativeFormat:@"-#,##0.00 ¤"]; 

這導致:$ US的1,250.56代替$ 1,250.56

我不會設置語言環境,因爲我只是一個符號:EUR/USD/GBP等。

+0

要重現這一點,很多英語人士必須設置格式器的區域。例如,使用'[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@「sv_SE」]]',格式化程序將$ 1234.99格式化爲「1 234,99 US $」。 –

+0

我的救星!如果我真的重寫語言環境爲EN,我可以做我想要的東西:) – omartin

回答

-1

貨幣的數字樣式應設置爲NSNumberFormatterCurrencyStyle

編輯:按照修正通過@Jeremy W.謝爾曼的$US你看到的是在某些(所有?)非en語言環境,應在CurrencyStyle顯示默認currencySymbol爲美元。美元的internationalCurrencySymbolUSD,如果您按照Unicode tr35-10的格式提供兩個貨幣字符,它應該只顯示國際貨幣符號。

我想你只需要解析貨幣字符串並去除字母字符。當然,假設沒有一個只有大寫字母的貨幣符號。

+0

是的,我確實遵循http://unicode.org/reports/tr35/tr35-10.html#Number_Format_Patterns,但仍然沒有運氣:( – omartin

+0

@downvoter對於非EN區域設置,這是解決OP的問題並保留正確貨幣符號的唯一方法,除非您可以提供替代方案。 – darvids0n

1

嘗試使用NSNumberFormatterCurrencyStyle。

這個簡單的代碼:

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[currencyFormatter setCurrencyCode:currencyCode]; 

NSString *formatted = [currencyFormatter stringFromNumber:[NSDecimalNumber decimalNumberWithString:@"1250.56"]]; 
NSLog(@"%@", formatted); 

輸出:

2011-10-26 19:18:49.141 Craplet[8716:707] $1,250.56 

這麼說,我不能瑞普您的問題。如果我使用十進制的風格,你的正面和負面的明確的格式作品:

// ... 
[currencyFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
// ... 
[currencyFormatter setPositiveFormat:@"#,##0.00 ¤"]; 
[currencyFormatter setNegativeFormat:@"-#,##0.00 ¤"]; 

2011-10-26 19:29:28.943 Craplet[9458:707] 1,250.56 $ 
2011-10-26 19:29:28.949 Craplet[9458:707] -1,250.56 $ 
+0

非常奇怪,不適用於我我仍然獲得$ US或£UK – omartin

5

如果你想有一個美元符號,只是一個美元符號,爲什麼不指定一個像'$#,##0.00'格式與文字$?或者,指定一個區域設置,以默認方式按照您想要的方式格式化數量。

指定NSNumberFormatterCurrencyStyle只是一個設置區域設置的標準貨幣格式的快捷方式,包括符號是前綴還是後綴,但對您所做的操作沒有什麼影響,因爲您正在指定手動格式。

您看到US$,因爲它正在爲您所在的地區適當地格式化貨幣美元。 (儘管您必須將您的格式字符串和您的輸出混合起來,因爲確實要求尊重您是否要求貨幣代碼的前綴或後綴位置。)但darvids0n大多是正確的:在格式字符串

  • 一個貨幣符號放置區域的符號爲貨幣,這是「$」,在恩和許多其他US$;
  • 兩個地方的國際象徵,如「美元」;
  • 三個地方顯示該貨幣的顯示名稱,如「美元」。

下面是使用瑞典區域設置此行爲的示例(默認情況下繼承,沒有設置明確的,這就是我的機器在設定現在):

> nf := NSNumberFormatter alloc init 
> nf setNumberStyle:NSNumberFormatterDecimalStyle 
> amt := 1250.56 

> nf setPositiveFormat:'¤ #,##0.00' 
> nf stringFromNumber:amt 
'US$ 1 250,56' 

> nf setPositiveFormat:'#,##0.00 ¤' 
> nf stringFromNumber:amt 
'1 250,56 US$' 

> nf setPositiveFormat:'#,##0.00 ¤¤' 
> nf stringFromNumber:amt 
'1 250,56 USD' 

> nf setPositiveFormat:'#,##0.00 ¤¤¤' 
> nf stringFromNumber:amt 
'1 250,56 US-dollar' 

(語法是, F-Script。)

+0

+1爲什麼我沒有看到美元(我是en) – bryanmac

+0

是的,我可以做到這一點,但這不會與其他貨幣的工作不幸。 – omartin