NSNumberFormatter numberFromString retourne null
Voici mon code
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *amount = [[NSNumber alloc] init];
NSLog(@"the price string is %@", price);
amount = [currencyStyle numberFromString:price];
NSLog(@"The converted number is %@",[currencyStyle numberFromString:price]);
NSLog(@"The NSNumber is %@", amount);
NSLog(@"The formatted version is %@", [currencyStyle stringFromNumber:amount]);
NSLog(@"--------------------");
self.priceLabel.text = [currencyStyle stringFromNumber:amount];
[amount release];
[currencyStyle release];
C'est ce que le journal crache
le prix de la chaîne est de 5
Le nombre converti est (null)
Le NSNumber est (null)
La version mise en forme est (null)
Suis-je raté quelque chose?
EDIT: mise à Jour du code
NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *amount = [currencyStyle numberFromString:price];
NSLog(@"the price string is %@", price);
NSLog(@"The converted number is %@",[currencyStyle numberFromString:price]);
NSLog(@"The NSNumber is %@", amount);
NSLog(@"The formatted version is %@", [currencyStyle stringFromNumber:amount]);
NSLog(@"--------------------");
self.priceLabel.text = [NSString stringWithFormat:@" %@ ", [currencyStyle stringFromNumber:amount]];
[currencyStyle release];
- Devrait fonctionner si le prix est défini comme suit:
NSString *price = @"5";
. Aussi, ne pas allouer et d'initamount
depuis, plus tard, vous l'attribuer à un autoreleased valeur, et aussi ne pas libération montant. - Ouais j'ai compris....
Vous devez vous connecter pour publier un commentaire.
Qu'est-ce que
price
? En supposant que c'est un ivar, de ne pas accéder à ivars directement. Toujours utiliser des accesseurs sauf dansdealloc
etinit
.En supposant
price
est une chaîne de caractères, pourquoi faites-vous ceci:Si
price
est unNSNumber
, alors vous pouvez l'utiliser directement.Vous êtes en train de créer un
NSNumber
ici, en les confiant àamount
, puis immédiatement de le jeter. Vous ensuite sur libérationamount
. Donc, vous devriez vous attendre le code ci-dessus à l'écrasement. (En raison d'une bizarrerie dans la façon dontNSNumber
objets sont gérés, ce crash arrivera la prochaine fois que vous créez unNSNumber
pour l'entier 5.)Et d'obtenir tout le chemin autour de votre question, la raison pour laquelle le montant est
nil
est parce que "5" n'est pas dans l'actuel format de devise, de sorte que le nombre de formatage, l'a rejeté. Si vous êtes aux états-unis et de l'ensembleprice
à "$5.00", il pourrait fonctionner.Si vous êtes vraiment essayer de convertir une chaîne de caractères$ US, alors c'est comment le faire. Notez que les paramètres régionaux de questions ici. Si vous utilisez les paramètres régionaux par défaut, puis en France "1.25" sera de eur 1,25, ce qui n'est pas le même que $1.25.
Vous devez toujours nous
NSDecimalNumber
lors de la tenue de davise. Sinon, vous êtes assujetti à la binaire/décimal erreurs d'arrondi.Les utilisations suivantes de l'ARC.
Plus complet de la classe pour la gestion localisée de la monnaie (
RNMoney
) est disponible dans l'exemple de code pour le chapitre 13 de iOS 5 Programmation de Repousser les Limites.