Jak mogę przekonwertować NSString
zawierający szereg jakiegokolwiek prymitywnego typu danych (np int
, float
, char
, unsigned int
, itd.)? Problem polega na tym, że nie wiem, jaki typ numeru będzie zawierał łańcuch w czasie wykonywania.
Mam pomysł, jak to zrobić, ale nie jestem pewien, czy to działa z dowolnym typem, także z wartościami niepodpisanymi i zmiennoprzecinkowymi:
long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber];
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];
Dzięki za pomoc.
+currentLocale
, ale masz rację; zawsze trzeba brać pod uwagę lokalizację, gdy mamy do czynienia z konwertowaniem rzeczy do postaci czytelnej dla człowieka.Można użyć
-[NSString integerValue]
,-[NSString floatValue]
itp Jednak prawidłowe (locale wrażliwych, etc.) sposobem, aby to zrobić jest użycie-[NSNumberFormatter numberFromString:]
który daje NSNumber przeliczona z odpowiedniej lokalizacji i biorąc pod uwagę ustawieniaNSNumberFormatter
(w tym, czy pozwoli to pływający wartości punktowe).źródło
@"2000"
naint
i[@"2000" integerValue]
działało ładnie i jest trochę prostsze w moim przypadku.[NSNumber numberWithInteger ...]
Cel C
(Uwaga: ta metoda nie działa dobrze z różnicami lokalizacji, ale jest nieco szybsza niż a
NSNumberFormatter
)Szybki
Prosty, ale brudny sposób
Sposób rozszerzenia Jest to naprawdę lepsze, ponieważ będzie dobrze grało z ustawieniami narodowymi i dziesiętnymi.
Teraz możesz po prostu zrobić:
źródło
,
i.
odwrotnie (np42.000,42
. CośfloatValue
prawdopodobnie nie odpowiada?@([@"42" intValue])
działało idealnie. Nie martwię się o ustawienia regionalne.Ciągów rozpoczynających się z liczb całkowitych, na przykład
@"123"
,@"456 ft"
,@"7.89"
itd wykorzystanie-[NSString integerValue]
.To
@([@"12.8 lbs" integerValue])
jest jak robienie[NSNumber numberWithInteger:12]
.źródło
Możesz także to zrobić:
Baw się dobrze!
źródło
Jeśli wiesz, że otrzymujesz liczby całkowite, możesz użyć:
źródło
Oto działająca próbka odczytu NSNumberFormatter zlokalizowanej liczby NSString (xCode 3.2.4, osX 10.6), aby zaoszczędzić innym godzinom, które właśnie spędziłem na zabawie. Uwaga: chociaż może obsługiwać końcowe spacje (działa „8765.4”), nie obsługuje wiodących białych znaków i nie może obsłużyć zbłąkanych znaków tekstowych. (Niepoprawne ciągi wejściowe: „8” i „8q” i „8 q”.)
źródło
Chciałem przekonwertować ciąg znaków na podwójny. Ta powyższa odpowiedź nie do końca działała dla mnie. Ale tak się stało: jak wykonać konwersję ciągu w Objective-C?
Wszystko, co właściwie zrobiłem, to:
źródło
Dziękuje wszystkim! Łączą się opinie i wreszcie mogę przekonwertować z wprowadzania tekstu (ciąg) na liczbę całkowitą. Dodatkowo może mi powiedzieć, czy wejście jest liczbą całkowitą :)
źródło
Myślę, że NSDecimalNumber to zrobi:
Przykład:
NSDecimalNumber jest podklasą NSNumber, więc dozwolone jest niejawne rzutowanie.
źródło
Co ze standardem C
atoi
?Czy uważasz, że są jakieś zastrzeżenia?
źródło
Możesz po prostu użyć
[string intValue]
lub[string floatValue]
lub[string doubleValue]
etcMożesz także użyć
NSNumberFormatter
klasy:źródło
możesz również zrobić tak, jak ten kod 8.3.3 ios 10.3 wsparcie
źródło
źródło
Pracował w Swift 3
źródło
Wiem, że jest bardzo późno, ale poniższy kod działa dla mnie.
Wypróbuj ten kod
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
To może ci pomóc. Dzięki
źródło
Spróbuj tego
Uwaga - użyłem longLongValue zgodnie z moimi wymaganiami. Możesz również użyć liczby całkowitej, długiej wartości lub dowolnego innego formatu, w zależności od wymagań.
źródło
źródło