J'ai besoin de formater un flottant (titre accrocheur, lui?) À 2 décimales, mais seulement si ces décimales ont des valeurs qui ne sont pas nulles. Exemple:
J'ai un NSTextField nommé 'answer', après avoir fait quelques calculs avec quelques flottants, je veux affecter ma variable 'answerFloat' à la 'answer' NSTextField. Jusqu'à présent, j'ai:
[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];
Mais cela définit quelque chose comme 45 à 45,00. Je veux que les nombres entiers soient affichés sans les zéros et que tous les nombres décimaux soient affichés avec leurs valeurs décimales respectives.
Dois-je exécuter une sorte de vérification avant de la donner à stringWithFormat? Ou NSString offre-t-il un moyen de gérer cela?
Avez-vous essayé le %g
spécificateur de format?
NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);
12-01-2010 19: 54: 38.651 foo [89884: 10b] 45, 45.5
Le problème avec% g est qu'il n'a pas de moyen de spécifier l'incrément d'arrondi (du moins, pas que je puisse trouver).
Vous pouvez utiliser NSNumberFormatter comme ceci pour obtenir votre résultat avec un nombre qui a un nombre indéfini de décimales.
double none = 5;
double one = 5.1;
double two = 5.01;
double lots = 5.918286558251858392107584219;
NSNumber *numberNone = [NSNumber numberWithDouble:none];
NSNumber *numberOne = [NSNumber numberWithDouble:one];
NSNumber *numberTwo = [NSNumber numberWithDouble:two];
NSNumber *numberLots = [NSNumber numberWithDouble:lots];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSLog(@"%@",[formatter stringFromNumber:numberNone]);
NSLog(@"%@",[formatter stringFromNumber:numberOne]);
NSLog(@"%@",[formatter stringFromNumber:numberTwo]);
NSLog(@"%@",[formatter stringFromNumber:numberLots]);
Production:
2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 5
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.1
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.01
2012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92
Recherchez NSNumberFormatter.
Pour une plus grande flexibilité, vous pouvez envisager d'implémenter une sous-classe personnalisée de NSFormatter . Il peut y avoir d'autres conseils saillants dans le Guide de programmation du formatage des données pour Cocoa .