web-dev-qa-db-fra.com

Comment ajouter des virgules au numéro tous les 3 chiffres dans Objective C?

Si j'ai un numéro int aNum = 2000000, comment puis-je le formater de manière à pouvoir l'afficher sous la forme NSString 2 000 000?

70
RexOnRoids

Ne faites pas votre propre formatage numérique. Vous ne réussirez presque certainement pas tous les cas Edge ni ne gérerez correctement tous les paramètres régionaux possibles. Utilisez la variable NSNumberFormatter pour formater des données numériques en représentation sous forme de chaîne.

Vous utiliseriez la méthode d'instance NSNumberFormatter-setGroupingSeparator: pour définir le séparateur de groupement sur @"," (ou encore meilleur [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]; merci @ntesler) et -setGroupingSize: pour placer un séparateur de regroupement tous les 3 chiffres.

79
Barry Wark

Utilisez NSNumberFormatter.

Plus précisément:

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];

[formatter release];

Par défaut, NSNumberFormatter utilise les paramètres régionaux actuels, de sorte que les séparateurs de regroupement sont définis par défaut sur leurs valeurs correctes. L'important est de ne pas oublier de définir un style de numérotation.

146
Nik

Il y a une méthode static sur NSNumberFormatter qui fait exactement ce dont vous avez besoin:

int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
                                                     numberStyle:NSNumberFormatterDecimalStyle];

Cette méthode est un peu plus succincte que la création d'une nouvelle variable NSNumberFormatter si vous n'avez pas besoin de configurer le formateur.

31
Phil Calvin

Encore plus facile:

NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);

un collègue vient de m'apprendre cela aujourd'hui. #incroyable

18
yujean

Pensez-y car je vais obtenir ce post à la recherche d’un échantillon ..__ Donc, si vous travaillez avec un numéro, faites attention aux prochains paramètres:

setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency

Ça pourrait être aussi 

setNumberStyle:NSNumberFormatterDecimalStyle

Tout le code est pour ARC.

Si vous travaillez avec Integer et que vous souhaitez obtenir des résultats tels que 200 000

int value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithInteger:value]];

Si vous travaillez avec Float et que vous souhaitez obtenir des résultats tels que 200 000,00

float value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithFloat:value]];

MODIFIER

Pour pouvoir utiliser différents séparateurs numériques, utilisez NSLocale. Add to code où NSLocale est spécifié dans l'identificateur de paramètres régionaux:

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];

ou utilisez le local actuel:

[formatter setLocale:[NSLocale currentLocale]];
15
Nazir

Version rapide 

let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))

Par http://ios.eezytutorials.com

1
Raj iOS

Pour Swift 4.0

let formatter = NumberFormatter()

formatter.numberStyle = .decimal

formatter.minimumFractionDigits = 2

formatter.maximumFractionDigits = 2

let result = formatter.string(from: NSNumber(value: 123456))
0
Sandip Patel - SM

Voici une solution facile. Ma réponse est presque la même que celle de @ Nazir, mais avec une petite astuce.

double current_balance = 2000000.00;

NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
//[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];  //if you want for currency with $ sign
[formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * currency_format =  [NSString stringWithFormat:@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:current_balance]]];
0
Mohammad Julfikar