2011-10-26 9 views
4
の代わりに$ US

私は明らかに何かを見逃しているに違いありませんが、私はこれであまりにも多くの時間を失ってしまったので、専門家に見せてもらいます。私はちょうど私がそれを望むようにフォーマットされた文字列を取得するつもりですが、通貨記号は私に問題を与えています:それはシンボルだけを必要とするときに国際コードのいくつかの種類を使用しています。

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

これは、その結果:$米国 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に設定する必要があります。

EDIT:@Jeremy W.シャーマンによる補正を1として$USあなたが見ているがCurrencyStyleにデフォルトで表示されるはずですenロケール、非(?すべての)一部では、米ドルに対してcurrencySymbolです。 internationalCurrencySymbolの米ドルはUSDであり、の2通の通貨文字を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 

私はあなたの問題をREPROことができない、と述べました。私はあなたの正と負の明示的な書式設定の作品の10進スタイル、使用している場合:

// ... 
[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$は、お住まいの地域の通貨USDを適切にフォーマットしているためです。 (は、が通貨コードのプレフィックスまたはサフィックスの配置を要求するかどうかにかかわらず、フォーマット文字列と出力を混ぜ合わせておく必要があります。)しかし、ほとんどが右darvids0nです:フォーマット文字列で

  • 一つの通貨記号は「$」でアンと他の多くでUS$でその通貨のロケールのシンボルを、配置します。
  • 「USD」のような国際シンボルは2桁です。
  • "USドル"のように、その通貨のロケールの表示名を3桁表示します。ここで

はスウェーデンのロケールを使用して、この動作の例である(デフォルトで継承され、明示的に設定されていない。それは私のマシンが今に設定されているものです):

> 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なぜ私は$ USが見えなかったのですか(私はenです) – bryanmac

+0

ええ、私はそれをすることができましたが、それは残念ながら他の通貨ではうまくいきません。 – omartin

関連する問題