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.
Vous devez vous connecter pour publier un commentaire.
Utiliser un
NSNumberFormatter
:Si la chaîne n'est pas un nombre valide, puis
myNumber
seranil
. Si c'est un nombre valide, alors vous avez maintenant toutes lesNSNumber
la bonté de comprendre à quel type de nombre, il est fait.+currentLocale
, mais vous avez raison; il faut toujours tenir compte de la langue lors de l'affaire avec la conversion des trucs-et-de forme lisible par l'homme.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 laNSNumberFormatter
(y compris si elle permettra de valeurs à virgule flottante).@"2000"
à unint
et[@"2000" integerValue]
travaillent bien et est un peu plus simple pour mon cas.[NSNumber numberWithInteger ...]
Objective-C
(Remarque: cette méthode n'est pas jouer gentil avec les différences locales, mais est légèrement plus rapide qu'un
NSNumberFormatter
)Swift
Simple mais sale
L'extension de sens
C'est mieux, vraiment, parce qu'il va jouer gentiment avec les paramètres régionaux et les décimales.
Maintenant, vous pouvez tout simplement faire:
,
et.
dans l'autre sens (par exemple42.000,42
. Quelque chosefloatValue
probablement ne compte pas?@([@"42" intValue])
a parfaitement fonctionné. Pas de soucis Locale.Pour les chaînes de caractères commençant avec des entiers, par exemple,
@"123"
,@"456 ft"
,@"7.89"
, etc., utilisation-[NSString integerValue]
.Donc,
@([@"12.8 lbs" integerValue])
est comme faire de la[NSNumber numberWithInteger:12]
.Vous pouvez également le faire:
Amusez-vous!
Si vous savez que vous recevez des entiers, que vous pouvez utiliser:
Voici un exemple de travail d'NSNumberFormatter lecture localisée nombre NSString (xCode 3.2.4, osX 10.6), pour en sauver d'autres les heures que je viens de déconner. Attention: bien qu'il puisse gérer les espaces à droite ("8,765.4 œuvres"), cela ne peut pas gérer le leader de l'espace blanc et cela ne peut pas gérer les errants des caractères de texte. (Mauvaise saisie de chaînes de caractères: "8" et "8q" et "8 q".)
J'ai voulu convertir une chaîne en un double. Cette réponse ci-dessus n'a pas assez de travail pour moi. Mais ce n': Comment faire des conversions de chaînes en Objective-C?
Tous j'ai à peu près fait était:
Merci À Tous! Je suis de retour d'informations et, enfin, réussi à convertir à partir de la saisie de texte ( chaîne de caractères ) à l'Entier. De Plus il pourrait me dire si l'entrée est entier 🙂
Je pense que NSDecimalNumber va le faire:
Exemple:
NSDecimalNumber est une sous-classe de NSNumber, de sorte que la conversion implicite permis.
Qu'en C standard
atoi
?Pensez-vous il y a des mises en garde?
Vous pouvez simplement utiliser
[string intValue]
ou[string floatValue]
ou[string doubleValue]
etcVous pouvez également utiliser
NSNumberFormatter
classe:vous pouvez aussi faire comme ce code 8.3.3 ios 10.3 soutien
Travaillé dans Swift 3
Je sais que c'est très tard, mais au-dessous de code est de travailler pour moi.
Essayer ce code
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
Cela peut vous aider. Grâce
Essayer cette
Remarque - j'ai utilisé longLongValue que par mon exigence. Vous pouvez également utiliser integerValue, longValue, ou tout autre format en fonction de votre exigence.