12
votes

Convertir Nstring en double pour calculs, puis retour pour imprimer dans Nstring

J'accepte Nstring comme xxx

de uipickerview. Je veux xxx

Je devrais pouvoir obtenir la chaîne dans le message après que je fais les calculs. Mon programme est en train de casser


0 commentaires

4 Réponses :


36
votes
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];

4 commentaires

Maintenant c'est juste complètement subjectif


J'ai regardé autour de moi et jusqu'à présent% f et% g semblent être identiques selon la plupart des références. Comment sont-ils différents?


@tc. Qu'est-ce qui ne va pas? C'est subjectif, ne soyez pas arrogant. +1 pour la compensation.


% g ne vous donnera pas 300 chiffres de production, sauf si vous le demandez.



1
votes
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%g",cal];

// do work with message

[message release];

0 commentaires

3
votes

Vous ne devriez pas convertir entre les doubles et les cordes tout le temps, car il a tendance à perdre de l'exactitude (en général, vous devez être très prudent si vous ne voulez pas perdre de précision).

Par exemple, NextAprès (1.0,2.0) renvoie le plus petit double supérieur à 1 (exactement 1.00000000000000222204466492503130808472503336181640625, mais nous sommes heureux avec 1.0000000000000002). Formatage avec "% g" vient de retourner "1".

Nous nous attendions à ce que NSNumber fasse la bonne chose, mais [[Numéro Numérovithandoudouble: NextAntaTer (1,2)] StringValue] retourne également "1". Selon les docs, - [nsnumber stringvalue] appels [auto-descriptionWithLocale: nil] qui le formate avec "% 0.16g". Ce n'est pas assez. Nous obtenons la bonne réponse en format avec "% .17g", cependant. Je pense que "% .17g" suffit à condition que les doubles soient en double IEEE 754 64 bits et que les bibliothèques fonctionnent correctement, mais il n'y a aucune garantie.

À la fin de la journée, rien ne garantit que [[NSString StringwithFormat: @ "%. 17g", n] doublevalue] == n . .


1 commentaires

Merci pour cela, mais je devais juste avoir besoin de 2 décimales .. IE: 12.50



1
votes

Publication d'une nouvelle réponse depuis l'acceptation de l'acceptation que String => Double:

double cost = [string doubleValue];


2 commentaires

Pourquoi le pointeur? Il devrait être double coût = [string doublevalue];


bon point. sur un méta-niveau ... pourquoi le commentaire? Il suffit de modifier le message? :RÉ