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?
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];
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
Vous devez utiliser NSNumberFormatter eg:
NSNumberFormatter * nFormatter = [[NSNumberFormatter alloc] init];
[nFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *num = [nFormatter numberFromString:@"12345678.1234"];
[nFormatter release];