it-swarm.com.de

Wie mache ich String-Konvertierungen in Objective-C?

Ich möchte eine Zeichenfolge in eine doppelte konvertieren und nach einigen Berechnungen wieder in eine Zeichenfolge konvertieren.

Wie mache ich das in Objective-C?

Gibt es auch eine Möglichkeit, ein Double auf die nächste Ganzzahl zu runden?

146
rksprst

Mit können Sie einen NSString in einen Double umwandeln

double myDouble = [myString doubleValue];

Das Runden auf das nächste int kann dann wie folgt erfolgen

int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

Ich bin mir ehrlich gesagt nicht sicher, ob es eine effizientere Möglichkeit gibt, wieder in eine Zeichenfolge umzuwandeln als

NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
230
olliej

Um wirklich von einer Zeichenfolge in eine Zahl zu konvertieren, müssen Sie eine Instanz von NSNumberFormatter verwenden, die für das Gebietsschema konfiguriert ist, von dem Sie die Zeichenfolge lesen.

Verschiedene Gebietsschemas formatieren Zahlen unterschiedlich. Beispielsweise wird in einigen Teilen der Welt COMMA als Dezimaltrennzeichen verwendet, während es in anderen Teilen PERIOD ist und das Tausendertrennzeichen (falls verwendet) umgekehrt wird. Außer wenn es ein Leerzeichen ist. Oder gar nicht vorhanden.

Es kommt wirklich auf die Herkunft des Inputs an. Am sichersten konfigurieren Sie NSNumberFormatter für die Formatierung Ihrer Eingabe und verwenden -[NSFormatter numberFromString:], um ein NSNumber daraus zu erhalten. Wenn Sie Konvertierungsfehler behandeln möchten, können Sie -[NSFormatter getObjectValue:forString:range:error:] stattdessen.

70
Chris Hanson

Um die Antwort von olliej zu ergänzen, können Sie mit NSNumber 's stringValue von einem int zurück in einen String konvertieren:

[[NSNumber numberWithInt:myInt] stringValue]

stringValue in einem NSNumber ruft descriptionWithLocale:nil auf und gibt Ihnen eine lokalisierte Zeichenfolgendarstellung des Werts. Ich bin nicht sicher, ob [NSString stringWithFormat:@"%d",myInt] Eine korrekt lokalisierte Darstellung von myInt liefert.

32
Barry Wark

Hier ist ein funktionierendes Beispiel für NSNumberFormatter, in dem die lokalisierte Zeichenfolge (xCode 3.2.4, osX 10.6) gelesen wird, um anderen die Stunden zu ersparen, die ich gerade mit herumspielen verbracht habe. Achtung: Während abschließende Leerzeichen wie "8.765,4" verarbeitet werden können, können keine führenden Leerzeichen und keine Streutextzeichen verarbeitet werden. (Schlechte Eingabezeichenfolgen: "8" und "8q" und "8 q".)

NSString *tempStr = @"8,765.4";  
     // localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
     // next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial

NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", 
    tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release];  // good citizen
7
miker

olliejs Rundung Methode ist falsch für negative Zahlen

  • 2.4 gerundet ist 2 (nach der Methode von olliej stimmt das)
  • −2.4 gerundet ist −2 (olliejs Methode gibt -1 zurück)

Hier ist eine Alternative

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

Sie können natürlich eine Rundungsfunktion von math.h verwenden

7
Paul Dixon
// Converting String in to Double

double doubleValue = [yourString doubleValue];

// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal

// Converting double to int

int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];
3
Samir Jwarchan

Wie wäre es mit der Verwendung der neuen Literalsyntax (XCode> = 4.4), wenn Sie eine Zahl in einen String umwandeln möchten?.

int myInt = (int)round( [@"1.6" floatValue] );

NSString* myString = [@(myInt) description];

(Boxt es als NSNumber ein und konvertiert es mit der NSObjects 'description Methode in einen String.)

2
Robert

Zum Runden sollten Sie wahrscheinlich die in math.h definierten C-Funktionen verwenden.

int roundedX = round(x);

Halten Sie die Wahltaste gedrückt und doppelklicken Sie in Xcode auf round. Daraufhin wird die Manpage mit verschiedenen Funktionen zum Runden verschiedener Typen angezeigt.

2
benzado

Am Ende habe ich dieses praktische Makro verwendet:

#define STRING(value)               [@(value) stringValue]
1
dimanitm

in diesem Beispiel sehen Sie die Konvertierungen in beide Richtungen:

NSString *[email protected]"5678901234567890";

long long verylong;
NSRange range;
range.length = 15;
range.location = 0;

[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];

NSLog(@"long long value %lld",verylong);
1
zoltan

wandelt den in das Textfeld eingegebenen Text in eine Ganzzahl um

double mydouble=[_myTextfield.text doubleValue];

rundung auf das nächste Doppel

mydouble=(round(mydouble));

rundung auf das nächste int (unter Berücksichtigung nur positiver Werte)

int myint=(int)(mydouble);

umwandlung von Double in String

myLabel.text=[NSString stringWithFormat:@"%f",mydouble];

oder

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

umwandlung von int in string

myLabel.text=[NSString stringWithFormat:@"%d",myint];

oder

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
1
Ashish Pisey

Dies ist der einfachste Weg, den ich kenne:

float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
1
Sam Soffes