582 Stimmen

Konvertierung eines NSString in eine NSNumber

Wie kann ich eine NSString mit einer Zahl eines beliebigen primitiven Datentyps (z. B. int , float , char , unsigned int , usw.)? Das Problem ist, dass ich nicht weiß, welchen Zahlentyp die Zeichenfolge zur Laufzeit enthalten wird.

Ich habe eine Idee, wie man das macht, aber ich bin mir nicht sicher, ob das mit jedem Typ funktioniert, auch mit vorzeichenlosen und Fließkommawerten:

long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber]; 
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];

Vielen Dank für die Hilfe.

26voto

Ad1905 Punkte 261

Wenn Sie wissen, dass Sie Ganzzahlen empfangen, können Sie diese verwenden:

NSString* val = @"12";
[NSNumber numberWithInt:[val intValue]];

11voto

miker Punkte 191

Hier ist ein funktionierendes Beispiel für NSNumberFormatter, das lokalisierte NSString-Zahlen liest (xCode 3.2.4, osX 10.6), um anderen die Stunden zu ersparen, die ich gerade mit Herumprobieren verbracht habe. Achtung: während es mit nachgestellten Leerzeichen umgehen kann ("8.765,4" funktioniert), kann es nicht mit führenden Leerzeichen umgehen und es kann nicht mit verstreuten Textzeichen umgehen. (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

5voto

DNA App Lab Punkte 51

Danke an alle! Ich kombiniere Feedback und schaffe es endlich, von Texteingabe (String) zu Integer zu konvertieren. Plus es könnte mir sagen, ob die Eingabe Integer ist :)

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:thresholdInput.text];

int minThreshold = [myNumber intValue]; 

NSLog(@"Setting for minThreshold %i", minThreshold);

if ((int)minThreshold < 1 )
{
    NSLog(@"Not a number");
}
else
{
    NSLog(@"Setting for integer minThreshold %i", minThreshold);
}
[f release];

5voto

Anthony Punkte 859

Ich wollte einen String in einen Double konvertieren. Die obige Antwort hat bei mir nicht ganz funktioniert. Aber das hier schon: Wie macht man String-Konvertierungen in Objective-C?

Alles, was ich tat, war so ziemlich:

double myDouble = [myString doubleValue];

4voto

JeanNicolas Punkte 318

Ich denke, NSDecimalNumber wird es tun:

NSNumber *theNumber = [NSDecimalNumber decimalNumberWithString:[stringVariable text]]];

NSDecimalNumber ist eine Unterklasse von NSNumber, so dass implizites Casting erlaubt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X