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?
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.
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.
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.
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
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]];
Version rapide
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))
Pour Swift 4.0
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let result = formatter.string(from: NSNumber(value: 123456))
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]]];