2010-07-07 9 views
0

Je dois modifier le code ci-dessous pour que "intAmount" soit une décimale ou un nombre entier (c'est-à-dire qu'une personne peut entrer .10 ou 1) dans mon champ uitext. La dernière ligne "myProduct" doit être une décimale et non un entier et retourner le produit au format "18.00" par exemple. Quelqu'un peut-il aider quelqu'un à m'aider à modifier mon code pour cela?Conversion de NSString en nombre décimal

//amt has to be converted into a decimal value its a NSString now 
NSInteger intAmount = [amt intValue]; 
//where total gets updated in the code with some whole (integer) value 
NSInteger total=0; 
//Change myProduct to a decimal with presicion of 2 (i.e. 12.65) 
NSInteger myProduct=total*intAmount; 

CE NE FONCTIONNE PAS

NSDecimalNumber intAmount = [amt doubleValue]; 
//Keep in mind totalCost is an NSInteger 
NSDecimalNumber total=totalCost*intAmount; 
+0

Vous ne voulez pas dire 'décimal', vous voulez dire 'non-entier' ou 'fraction'. La décimale est une base. –

+0

décimal est également une classe ... mieux que fl; oat ou double - au moins en C#. Je garderais à la fois 'total' et' intInteger' comme "décimal", mais effectuer un cast juste avant une affectation. Vous avez juste besoin de trouver un moyen de convertir une chaîne en "décimal". Juste si je voudrais simplifier le flux de travail pour vous un peu. http://www.macrumors.com/showthread.php?t=900938 –

+1

@Hamish Grubijan: Cette question est clairement sur Cocoa/Objective-C, donc il n'y a pas de classe comme "décimal". – Chuck

Répondre

3

Utilisation doubleValue au lieu de intValue pour obtenir le nombre fractionnaire correct de votre champ de texte. Mettez-le dans une variable de type double plutôt que NSInteger. Ensuite, utilisez le format %.2g lorsque vous l'imprimez et il semblera que vous le souhaitez.

+0

Carl pouvez-vous écrire le code pour imprimer le format –

+0

S'il vous plaît regarder mon code modifié ci-dessus, il ne fonctionne pas. –

+0

vous devez utiliser double pas NSDecimalNumber. Encore que% .2g ne mettra pas de zéros (c'est-à-dire si le total est de 3,60, il lit 3.6 et si le total est de 36 il lit 36, il devrait être 36.00). –

2

Si vous avez besoin de suivre les valeurs décimales explicitement, vous pouvez utiliser NSDecimalNumber. Cependant, si tout ce que vous faites est cette opération, la solution de Carl est probablement adéquate.

0

Si vous avez une représentation de chaîne d'un nombre réel (non entier), vous pouvez utiliser un objet NSScanner pour scanner dans un double ou float, ou même une structure NSDecimal si tel est votre véritable intention (struct NSDecimal et la classe NSDecimalNumber est utile pour contenir des nombres qui peuvent être exactement représentés en décimal).

NSString *amt = @"1.04"; 
NSScanner *aScanner = [NSScanner localizedScannerWithString:amt]; 
double theValue; 

if ([aScanner scanDouble:&theValue]) 
{ 
    // theValue should equal 1.04 (or thereabouts) 
} 
else 
{ 
    // the string could not be successfully interpreted 
} 

L'avantage d'utiliser un objet NSScanner localisé est que le nombre est interprété en fonction des paramètres régionaux de l'utilisateur, car “ 1.000 ” pourrait signifier soit un mille ou un seul, en fonction de vos paramètres régionaux.