Chcę zamienić ciąg na podwójny i po wykonaniu kilku obliczeń, przekonwertować go z powrotem na ciąg.
Jak to zrobić w Objective-C?
Czy istnieje również sposób na zaokrąglenie podwójnej do najbliższej liczby całkowitej?
objective-c
cocoa
cocoa-touch
rksprst
źródło
źródło
Odpowiedzi:
Możesz przekonwertować NSString na podwójne za pomocą
Zaokrąglanie do najbliższego int można następnie wykonać jako
Szczerze mówiąc nie jestem pewien, czy istnieje bardziej usprawniony sposób konwersji z powrotem na ciąg niż
źródło
[[NSNumber numberWithInt:myInt] stringValue]
Aby naprawdę poprawnie przekonwertować ciąg na liczbę, musisz użyć wystąpienia
NSNumberFormatter
skonfigurowanego dla ustawień regionalnych, z których czytasz ciąg.Różne ustawienia regionalne będą inaczej formatować liczby. Na przykład w niektórych częściach świata
COMMA
jest używany jako separator dziesiętny, podczas gdy w innych jestPERIOD
- a separator tysięcy (jeśli jest używany) jest odwrócony. Chyba że jest to przestrzeń. Albo wcale.To naprawdę zależy od pochodzenia wkładu. Najbezpieczniejszą rzeczą do zrobienia jest skonfigurowanie a pod
NSNumberFormatter
kątem sposobu formatowania danych wejściowych i użycie go-[NSFormatter numberFromString:]
do uzyskaniaNSNumber
z niego. Jeśli chcesz obsłużyć błędy konwersji, możesz użyć-[NSFormatter getObjectValue:forString:range:error:]
zamiast tego.źródło
Dodając do odpowiedzi olliej, można przekształcić z powrotem do int ciąg z
NSNumber
„sstringValue
:stringValue
na zasadzieNSNumber
wywołujedescriptionWithLocale:nil
, daje zlokalizowaną reprezentację ciąg wartości. Nie jestem pewien, czy[NSString stringWithFormat:@"%d",myInt]
dostaniesz odpowiednio zlokalizowaną kopięmyInt
.źródło
Metoda zaokrąglania ollieja jest błędna dla liczb ujemnych
Oto alternatywa
Możesz oczywiście użyć funkcji zaokrąglania z math.h
źródło
Oto działająca próbka NSNumberFormatter odczytująca zlokalizowaną liczbę String (xCode 3.2.4, osX 10.6), aby zaoszczędzić innym godzin, które właśnie spędziłem na zabawie. Uwaga: chociaż obsługuje końcowe spacje, takie jak „8 765,4”, nie obsługuje początkowych białych znaków i nie obsługuje przypadkowych znaków tekstowych. (Nieprawidłowe ciągi wejściowe: „8”, „8q” i „8 q”).
źródło
nil
wartość,NSNumber*
jeśli nie można jej przeanalizować. Nie mogę odtworzyć tego problemu, który miałeś z wiodącymi białymi znakami i zabłąkanymi znakami tekstowymi, IMO działa poprawnie." 28.5 "
analizuje jak 28,5, i"gibberish28.5"
,"28.5gibberish"
i"gibberish28.5gibberish"
wszystkie są unparseable;" 2 8 . 5. "
jest nie do przeanalizowania, ale nie jest to niezwykłe.źródło
W przypadku konwersji z liczby na łańcuch, co powiesz na użycie nowej składni literałów (XCode> = 4.4), jest trochę bardziej zwarta.
( Pakuje to jako NSNumber i konwertuje na ciąg przy użyciu metody opisu NSObjects )
źródło
Do zaokrąglania prawdopodobnie powinieneś używać funkcji C zdefiniowanych w math.h.
Przytrzymaj Option i kliknij dwukrotnie
round
w Xcode, a wyświetli się strona podręcznika z różnymi funkcjami do zaokrąglania różnych typów.źródło
To najłatwiejszy sposób, jaki znam:
źródło
z tego przykładu tutaj możesz zobaczyć konwersje w obie strony:
źródło
konwertuje tekst wprowadzony w polu tekstowym na liczbę całkowitą
zaokrąglenie do najbliższego podwójnego
zaokrąglanie do najbliższej liczby całkowitej (biorąc pod uwagę tylko wartości dodatnie)
konwersja z podwójnej na ciąg
lub
konwertowanie z int na string
lub
źródło
Skończyło się na tym przydatnym makrze:
źródło