580 votes

Comment faire pour convertir un NSString dans un NSNumber

Comment puis-je convertir un NSString contenant un certain nombre de primitives de type de données (par exemple, int, float, char, unsigned int, etc.)? Le problème est, je ne sais pas quel type de numéro de la chaîne contiendra au moment de l'exécution.

J'ai une idée de comment le faire, mais je ne suis pas sûr si cela fonctionne avec tout type, aussi non signés et les valeurs à virgule flottante:

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

Merci pour l'aide.

1263voto

Dave DeLong Points 156978

Utiliser un NSNumberFormatter:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:@"42"];
[f release];

Si la chaîne n'est pas un nombre valide, alors myNumber sera nil. Si c'est un nombre valide, alors vous avez maintenant tous les de la NSNumber bonté de comprendre à quel type de nombre, il est fait.

182voto

Barry Wark Points 73462

Vous pouvez utiliser -[NSString integerValue], -[NSString floatValue], etc. Cependant, le bon (sensibles aux paramètres régionaux, etc.) façon de le faire est d'utiliser -[NSNumberFormatter numberFromString:] qui va vous donner un NSNumber converti à partir du paramètre régional approprié et en fonction des réglages de l' NSNumberFormatter (y compris si elle permettra de valeurs à virgule flottante).

145voto

Kevin R Points 1147

Je suis surpris que personne n'a mentionné l'aide de la @-notation:

NSNumber *num1 = @([@"42" intValue]);
NSNumber *num2 = @([@"42.42" floatValue]);

86voto

MattDiPasquale Points 23842

Pour les chaînes de caractères commençant avec des entiers, par exemple, @"123", @"456 ft", @"7.89", etc., utiliser -[NSString integerValue].

Donc, @([@"12.8 lbs" integerValue]) est comme faire de la [NSNumber numberWithInteger:12].

50voto

MacMark Points 1663

Vous pouvez également faire ceci:

NSNumber *number = @([dictionary[@"id"] intValue]]);

Amusez-vous!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X