Ich habe vor kurzem entdeckte diese Einzeiler:
[@1234567 descriptionWithLocale:[NSLocale currentLocale]]; // 1,234,567
Oder in Swift 2:
1234567.descriptionWithLocale(NSLocale.currentLocale()) // 1,234,567
Swift 3/4:
(1234567 as NSNumber).description(withLocale: Locale.current)
pro Frage Formatiert:
[@(n) descriptionWithLocale:[NSLocale currentLocale]];
ohne Literale Objective-C Formatiert:
[[NSNumber numberWithInt:n] descriptionWithLocale:[NSLocale currentLocale]];
Dies ist die Lösung, die ich suchte, als ich die Frage gestellt. Verfügbar seit iOS 2.0 und OS X 10.0, dokumentiert, um eine Zeichenfolgenversion der gemäß dem angegebenen Gebietsschema formatierten Zahl zurückzugeben.stringValue
ist sogar dokumentiert, diese Methode zu verwenden, aber nil
übergeben.
Da es meine Frage ist und dies meiner Antwort am besten entspricht, bin ich versucht, die Ticks zu ändern, aber es scheint grausam. Update Ich habe das Häkchen geändert, diese Antwort lautet die Antwort.
Der einfachste Weg, dies zu tun ist '[NSString stringWithFormat: @"% d doodads ", [[[NSNumberFormatter allocation] Autorelease) stringFromNumber: n]]];'? Wie das ist ausführlicher als ich gehofft hatte. – mxcl
Max Howell: Normalerweise würden Sie an dem Zahlenformatierer in einer Instanzvariable festhalten (die Sie eine Steckdose machen können, um den Formatierer in einer Schreibfeder zu halten), was den Ausdruck einfach '' myFormatter stringFromNumber: [NSNummer numberWithInt: n] ] '. (Außerdem sollten Sie 'NSInteger' und' numberWithInteger: ', nicht' int' und 'numberWithInt:' verwenden, um die größere Reichweite auf 64-Bit-Rechnern zu nutzen.) –
Ich kann das nicht zum Laufen bringen. Auch mit setHasThousandSeparators: YES ändert nichts - keine tausend Trennzeichen. – mxcl