27 votes

Formatage des flottants dans l'objectif C

J'ai besoin de formater un flotteur (titre accrocheur, il?) à 2 décimales, mais seulement si ces décimales ont des valeurs qui ne sont pas à zéro. Exemple:

J'ai un NSTextField nommé "répondre", après je fais un peu de maths avec un couple de chars, je veux céder mon answerFloat variable "à la" réponse " NSTextField. Jusqu'à présent, j'ai:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

Mais qui définit quelque chose comme 45 à 45,00. Je veux des nombres entiers à afficher sans les zéros, et tout nombre de décimales à afficher avec leurs valeurs décimales.

Ai-je besoin pour exécuter une sorte de vérifier avant de la donner à stringWithFormat? Ou ne NSString offre un moyen de gérer cela?

40voto

Mark Bessey Points 13931

Avez-vous essayé le spécificateur de format %g ?

 NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);
 

12-01-2010 19: 54: 38.651 foo [89884: 10b] 45, 45.5

18voto

Mark Suman Points 6061

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
 

3voto

NSResponder Points 14459

Recherchez NSNumberFormatter.

2voto

mrkj Points 1985

La plus grande flexibilité, vous pourriez envisager de mettre en œuvre une sous-classe personnalisée de NSFormatter. Il y a peut être d'autres points saillants des conseils dans la mise en forme des Données Guide de Programmation pour le Cacao.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X