4

明らかな何かが欠けているに違いありませんが、これで時間を失いすぎたので、専門家に見てもらいます。希望どおりにフォーマットされた文字列を取得したいだけですが、通貨記号が問題を引き起こしています。記号のみが必要な場合に、ある種の国際コードを使用しています。

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

この結果: $ 1,250.56 ではなく$ US 1,250.56

シンボルがあるだけなので、ロケールを設定しません:EUR / USD / GBPなど..

4

2 に答える 2

4

ドル記号とドル記号だけが必要な場合'$#,##0.00'は、リテラルのような形式を指定してみません$か? または、デフォルトで必要な方法で金額をフォーマットするロケールを指定します。

指定NSNumberFormatterCurrencyStyleは、ロケールの標準通貨形式を設定するためのショートカットにすぎません。これには、記号が金額の前に付いているか後ろに付いているかが含まれますが、形式を手動で指定しているため、実行していることにはほとんど影響しません。

US$住まいの地域に合わせて通貨 USD を適切にフォーマットしているため、表示されています。(ただし、通貨コードのプレフィックスまたはサフィックスの配置を要求するかどうかを尊重するため、フォーマット文字列と出力を混同している必要があります。)しかし、darvids0nはほとんど正しいです:

  • 書式文字列内の 1 つの通貨記号は、その通貨のロケール記号を配置します。これは、en やUS$他の多くの記号では "$" です。
  • 「USD」などの国際記号が 2 か所に表示されます。
  • 3 桁は、その通貨のロケールの表示名 (「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の構文です。)

于 2011-10-26T23:44:16.583 に答える
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 $
于 2011-10-26T23:23:01.447 に答える