Comment puis - je convertir un NSString
contenant un certain nombre de tout type de données primitive (par exemple int
, float
, char
, unsigned int
, etc.)? Le problème est que je ne sais pas quel type de numéro la chaîne contiendra lors de l'exécution.
J'ai une idée de comment le faire, mais je ne sais pas si cela fonctionne avec n'importe quel type, également des valeurs non signées et à virgule flottante:
long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber];
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];
Merci pour l'aide.
+currentLocale
, mais vous avez raison; il faut toujours tenir compte des paramètres régionaux lors de la conversion de trucs vers et depuis une forme lisible par l'homme.Vous pouvez utiliser
-[NSString integerValue]
,-[NSString floatValue]
etc. Cependant, la manière correcte (paramètres régionaux, etc.) pour ce faire est d'utiliser ce-[NSNumberFormatter numberFromString:]
qui vous donnera un NSNumber converti à partir des environnements locaux appropriés et compte tenu des paramètres duNSNumberFormatter
(y compris si elle permettra flottante valeurs en points).la source
@"2000"
en unint
et j'ai[@"2000" integerValue]
bien travaillé et c'est un peu plus simple pour mon cas.[NSNumber numberWithInteger ...]
Objectif c
(Remarque: cette méthode ne fonctionne pas bien avec les différences de paramètres régionaux, mais est légèrement plus rapide que a
NSNumberFormatter
)Rapide
Manière simple mais sale
L'extension-way C'est mieux, vraiment, car il jouera bien avec les locales et les décimales.
Maintenant, vous pouvez simplement faire:
la source
,
et.
l'inverse (par exemple42.000,42
. Quelque chosefloatValue
ne tient probablement pas compte?@([@"42" intValue])
fonctionnait parfaitement. Pas inquiet pour Locale.Pour les chaînes commençant par des nombres entiers, par exemple
@"123"
,@"456 ft"
,@"7.89"
, etc., l' utilisation-[NSString integerValue]
.C'est
@([@"12.8 lbs" integerValue])
comme faire[NSNumber numberWithInteger:12]
.la source
Vous pouvez également le faire:
S'amuser!
la source
Si vous savez que vous recevez des nombres entiers, vous pouvez utiliser:
la source
Voici un exemple de travail de NSNumberFormatter lisant le numéro localisé NSString (xCode 3.2.4, osX 10.6), pour économiser aux autres les heures que je viens de passer à jouer. Attention: bien qu'il puisse gérer les blancs de fin ("8 765,4" fonctionne), cela ne peut pas gérer les espaces blancs en tête et cela ne peut pas gérer les caractères de texte errant. (Chaînes d'entrée incorrectes: "8" et "8q" et "8 q".)
la source
Je voulais convertir une chaîne en double. Cette réponse ci-dessus n'a pas vraiment fonctionné pour moi. Mais cela a fait: Comment faire des conversions de chaînes dans Objective-C?
Tout ce que j'ai fait, c'est:
la source
Merci a tous! Je suis une rétroaction combinée et parviens enfin à convertir de la saisie de texte (chaîne) en entier. De plus, il pourrait me dire si l'entrée est un entier :)
la source
Je pense que NSDecimalNumber le fera:
Exemple:
NSDecimalNumber est une sous-classe de NSNumber, la conversion implicite est donc autorisée.
la source
Qu'en est-il de la norme C
atoi
?Pensez-vous qu'il y ait des mises en garde?
la source
Vous pouvez simplement utiliser
[string intValue]
ou[string floatValue]
ou[string doubleValue]
etc.Vous pouvez également utiliser la
NSNumberFormatter
classe:la source
vous pouvez également faire comme ce code support 8.3.3 ios 10.3
la source
la source
A travaillé dans Swift 3
la source
Je sais que c'est très tard mais le code ci-dessous fonctionne pour moi.
Essayez ce code
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
Cela peut vous aider. Merci
la source
Essaye ça
Remarque - J'ai utilisé longLongValue selon mes besoins. Vous pouvez également utiliser integerValue, longValue ou tout autre format en fonction de vos besoins.
la source
la source