Chciałbym utworzyć sformatowany wynik liczby zmiennoprzecinkowej z poprawną lokalizacją na Cocoa-Touch. Wyjście powinno być równoważne z printf("%<a>.<b>f", n)
, gdzie <a>
jest całkowitą liczbą cyfr, a <f>
jest maksymalną liczbą cyfr ułamkowych.Jak sformatować i wydrukować liczby zmiennoprzecinkowe na iOS?
Konfiguracja NSNumberFormatter
z <a>=6
i <f>=2
(Platforma jest iOS 5.1 SDK, Xcode 4.3.3 i iPhone Simulator 5,1)
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];
[nf setPaddingCharacter:@" "];
[nf setUsesGroupingSeparator:NO];
[nf setLocale:[NSLocale autoupdatingCurrentLocale]];
[nf setUsesSignificantDigits:YES];
[nf setMaximumSignificantDigits:6];
[nf setMaximumFractionDigits:2];
[nf setRoundingMode:NSNumberFormatterRoundFloor];
NSLog(@"Test: %@", [nf stringFromNumber:[NSNumber numberWithDouble:2.64324897]]);
Oczekiwany wyjście (z niemieckiego regionu): Test: 2,64
Obserwowane wyjście (z niemiecką lokalizacją): Test: 2,64324
Inne obserwacje: Próbowałem użyć różnych wartości dla cyfr ułamkowych, np. [nf setMaximumFractionDigits:4]
lub [nf setMaximumFractionDigits:0]
. Wynik pozostaje niezmieniony, wydaje się, że cyfry ułamków są ignorowane. Zmiana ustawień regionalnych na US zmienia tylko numer ,
na .
, a nie liczbę cyfr ułamkowych.
Pytanie: Jak Mogę przetłumaczyć ciąg printf
-format poprawnie do NSNumberFormatter
?
Tak, to robi dokładnie to, co musi zrobić! Dziękuję, nawet spóźniona odpowiedź jest doceniana! – user8472
Nie ma za co! Miałem także trudności z lokalizacją. Powodzenia! – JFS
Magia. I tam byłem, pisząc kategorie NSNumber ... kiedy wszystko, czego potrzebowałem, było już tam, schludne i proste. Jest to rodzaj małych rzeczy, które sprawia, że tak lubimy Apple. – KPM