web-dev-qa-db-fra.com

Objective-c convertit Long et flotte en String

J'ai besoin de convertir deux nombres en chaîne dans Objective-C.

L'un est un nombre long et l'autre est un float.

J'ai cherché une solution sur Internet et tout le monde utilise stringWithFormat: mais je ne peux pas le faire fonctionner.

J'essaie 

NSString *myString = [NSString stringWithFormat: @"%f", floatValue]

pour 12345678.1234 et obtenez "12345678.00000" en sortie

et 

NSString *myString = [NSString stringWithFormat: @"%d", longValue]

Quelqu'un peut-il me montrer comment utiliser stringWithFormat: correctement?

28
Mark Comix

Cet article explique comment utiliser différentes chaînes de mise en forme pour convertir des nombres/objets en instances NSString:

Guide de programmation des chaînes: Mise en forme des objets chaîne

Qui utilisent les formats spécifiés ici:

Guide de programmation des chaînes: spécificateurs de format de chaîne

Pour votre char, vous voudriez:

[NSString stringWithFormat:@"%1.6f", floatValue]

Et pour ton long:

[NSString stringWithFormat:@"%ld", longValue] // Use %lu for unsigned longs

Mais honnêtement, il est parfois plus facile d’utiliser simplement la classe NSNumber:

[[NSNumber numberWithFloat:floatValue] stringValue];
[[NSNumber numberWithLong:longValue] stringValue];
61
Craig Otis

floatValue doit être un double. Au moins, cela compile correctement et fait ce qui est attendu sur ma machine Floats ne peut stocker que 8 chiffres décimaux et votre numéro 12345678.1234 requiert plus de précision que cela, de sorte que seuls les 8 chiffres les plus significatifs sont stockés dans un fichier. flotte.

double floatValue = 12345678.1234;
NSString *myString = [NSString stringWithFormat: @"%f", floatValue];

résulte en 

2011-11-04 11:40:26.295 Test basic command line[7886:130b] floatValue = 12345678.123400
3
simonpie

Vous devez utiliser NSNumberFormatter eg:

    NSNumberFormatter * nFormatter = [[NSNumberFormatter alloc] init];
    [nFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber *num = [nFormatter numberFromString:@"12345678.1234"];
    [nFormatter release];
0
asmad