Niedawno odkryliśmy ten jeden-liner:
[@1234567 descriptionWithLocale:[NSLocale currentLocale]]; // 1,234,567
Albo w Swift 2:
1234567.descriptionWithLocale(NSLocale.currentLocale()) // 1,234,567
Swift 3/4:
(1234567 as NSNumber).description(withLocale: Locale.current)
sformatowany za pytaniem:
[@(n) descriptionWithLocale:[NSLocale currentLocale]];
sformatowany bez literałów Objective-C:
[[NSNumber numberWithInt:n] descriptionWithLocale:[NSLocale currentLocale]];
To rozwiązanie szukałem kiedy zadałem pytanie. Dostępne od wersji iOS 2.0 i OS X 10.0, udokumentowane w celu zwrócenia wersji ciągowej liczby sformatowanej zgodnie z podanymi locale.stringValue
jest nawet udokumentowany, że używa tej metody, ale przekazuje nil
.
Widząc, jak to jest moje pytanie i to pasuje najlepiej do mojej odpowiedzi, mam ochotę zmienić zaznaczenie, ale wydaje się okrutne. Aktualizacja Zmieniłem zaznaczenie, ta odpowiedź to z odpowiedzią.
Tak więc absolutnie najłatwiej to zrobić: '[NSString stringWithFormat: @"% d doodads ", [[[NSNumberFormatter alloc] autorelease] stringFromNumber: n]]];'? Jest to bardziej gadatliwe, niż się spodziewałem. – mxcl
Max Howell: Normalnie trzymalibyście się formatera liczbowego w zmiennej instancyjnej (z której można zrobić wylot, aby zachować formatator w końcówce), co powoduje, że wyrażenie to po prostu '[myFormatter stringFromNumber: [numerNumerWithInt: n] ] '. (Powinieneś też używać 'NSInteger' i' numberWithInteger: ', a nie' int' i 'numberWithInt:', aby wykorzystać większy zasięg na maszynach 64-bitowych). –
Nie mogę tego uruchomić. Nawet użycie setHasThousandSeparators: YES nic nie zmienia - brak separatorów tysięcy. – mxcl