5 Stimmen

NSDecimalFormatter und Währungssymbole: $US anstelle von $

Ich muss etwas Offensichtliches übersehen haben, aber da ich viel zu viel Zeit damit verloren habe, überlasse ich den Experten das Nachsehen. Ich bin nur bereit, eine Zeichenfolge genau formatiert, wie ich es will, aber das Währungssymbol gibt mir ein Problem: es ist mit einer Art von internationalen Code, wenn ich nur das Symbol wollen.

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

Dies führt zu : $US 1.250,56 anstelle von $ 1,250.56

Ich werde das Gebietsschema nicht einstellen, da ich nur ein Symbol habe: EUR / USD / GBP usw..

4voto

Jeremy W. Sherman Punkte 35413

Wenn Sie ein Dollar-Zeichen und nur ein Dollar-Zeichen wollen, warum geben Sie nicht einfach ein Format wie '$#,##0.00' mit einer wörtlichen $ ? Alternativ können Sie auch ein Gebietsschema angeben, das den Betrag standardmäßig so formatiert, wie Sie es wünschen.

Angabe von NSNumberFormatterCurrencyStyle ist nur eine Abkürzung, um das Standard-Währungsformat des Gebietsschemas festzulegen. Dazu gehört auch, ob das Symbol dem Betrag vorangestellt oder angehängt wird, aber es hat wenig Einfluss auf das, was Sie tun, da Sie das Format von Hand festlegen.

Sie sehen US$ weil es die Währung USD für Ihre Region entsprechend formatiert. (Allerdings müssen Sie Ihre Formatzeichenfolge und Ihre Ausgabe verwechselt haben, denn es tut beachten Sie, ob Sie den Währungscode als Präfix oder Suffix angeben). Aber darvids0n hat größtenteils recht:

  • Ein Währungssymbol im Formatstring setzt das Symbol des Gebietsschemas für diese Währung, das in den Sprachen en und US$ in vielen anderen;
  • An zwei Stellen das internationale Symbol, z. B. "USD";
  • An dritter Stelle steht der Anzeigename des Gebietsschemas für diese Währung, z. B. "US Dollar".

Hier ist ein Beispiel für dieses Verhalten unter Verwendung des schwedischen Gebietsschemas (standardmäßig vererbt, nicht explizit eingestellt; das ist das, was auf meinem Rechner im Moment eingestellt ist):

> 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'

(Die Syntax entspricht der von F-Skript .)

1voto

bryanmac Punkte 38186

Versuchen Sie NSNumberFormatterCurrencyStyle.

Dieser einfache Code:

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

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

Ausgänge:

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

Allerdings kann ich Ihr Problem nicht reproduzieren. Wenn ich Dezimal-Stil verwenden, mit Ihrem positiven und negativen explizite Formatierung funktioniert:

// ...
[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 $

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X