Faire un flottant ne montre que deux décimales

J’ai la valeur 25.00 dans un float , mais quand je l’imprime à l’écran, c’est 25.0000000 .
Comment puis-je afficher la valeur avec seulement deux décimales?

Il ne s’agit pas de savoir comment le numéro est stocké, il s’agit de la manière dont vous l’affichez. Lorsque vous le convertissez en une chaîne, vous devez arrondir à la précision souhaitée, ce qui dans votre cas correspond à deux décimales.

Par exemple:

 NSSsortingng* formattedNumber = [NSSsortingng ssortingngWithFormat:@"%.02f", myFloat]; 

%.02f indique au formateur que vous %.02f un flottant ( %f ) et que celui-ci doit être arrondi à deux endroits et doit être complété par 0 s.

Par exemple:

 %f = 25.000000 %.f = 25 %.02f = 25.00 

Voici quelques corrections –

 //for 3145.559706 

Swift 3

 let num: CGFloat = 3145.559706 print(Ssortingng(format: "%f", num)) = 3145.559706 print(Ssortingng(format: "%.f", num)) = 3145 print(Ssortingng(format: "%.1f", num)) = 3145.6 print(Ssortingng(format: "%.2f", num)) = 3145.56 print(Ssortingng(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f" print(Ssortingng(format: "%.3f", num)) = 3145.560 print(Ssortingng(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f" 

Obj-C

 @"%f" = 3145.559706 @"%.f" = 3146 @"%.1f" = 3145.6 @"%.2f" = 3145.56 @"%.02f" = 3145.56 // which is equal to @"%.2f" @"%.3f" = 3145.560 @"%.03f" = 3145.560 // which is equal to @"%.3f" 

etc…

Vous pouvez également essayer d’utiliser NSNumberFormatter:

 NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease]; nf.positiveFormat = @"0.##"; NSSsortingng* s = [nf ssortingngFromNumber: [NSNumber numberWithFloat: myFloat]]; 

Vous devrez peut-être également définir le format négatif, mais je pense que c’est assez intelligent pour le comprendre.

Dans Swift Language, si vous voulez montrer que vous devez l’utiliser de cette manière. Pour atsortingbuer une valeur double à UITextView, par exemple:

 let result = 23.954893 resultTextView.text = NSSsortingng(format:"%.2f", result) 

Si vous voulez afficher dans LOG comme object-c utilise NSLog (), alors dans Swift Language vous pouvez faire ceci:

 println(NSSsortingng(format:"%.2f", result)) 

J’ai fait une extension rapide basée sur les réponses ci-dessus

 extension Float { func round(decimalPlace:Int)->Float{ let format = NSSsortingng(format: "%%.%if", decimalPlace) let ssortingng = NSSsortingng(format: format, self) return Float(atof(ssortingng.UTF8Ssortingng)) } } 

usage:

 let floatOne:Float = 3.1415926 let floatTwo:Float = 3.1425934 print(floatOne.round(2) == floatTwo.round(2)) // should be true 

IN Object-c, si vous traitez avec des tableaux de caractères réguliers (au lieu de pointeurs vers NSSsortingng), vous pouvez également utiliser:

 printf("%.02f", your_float_var); 

OTOH, si vous voulez stocker cette valeur sur un tableau de caractères, vous pouvez utiliser:

 sprintf(your_char_ptr, "%.02f", your_float_var); 

Le problème avec toutes les réponses est que la multiplication puis la division aboutissent à des problèmes de précision car vous avez utilisé la division. J’ai appris cela il y a longtemps à partir de la programmation sur un PDP8. La façon de résoudre ce problème est la suivante:

 return roundf(number * 100) * .01; 

Ainsi, 15.6578 ne renvoie que 15.66 et pas 15.6578999 ou quelque chose d’inattendu comme ça.

Quel niveau de précision vous voulez, à vous de choisir. Il suffit de ne pas diviser le produit, le multiplier par l’équivalent décimal. Aucune drôle de conversion de chaîne requirejse.

dans objective -c est-ce que vous voulez afficher la valeur flottante en 2 nombres décimaux puis passer l’argument indiquant combien de points décimaux vous voulez afficher, par exemple 0.02f imprimera 25.00 0.002f imprimera 25.000

Voici quelques méthodes pour formater dynamicment selon une précision:

 + (NSNumber *)numberFromSsortingng:(NSSsortingng *)ssortingng { if (ssortingng.length) { NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; f.numberStyle = NSNumberFormatterDecimalStyle; return [f numberFromSsortingng:ssortingng]; } else { return nil; } } + (NSSsortingng *)ssortingngByFormattingSsortingng:(NSSsortingng *)ssortingng toPrecision:(NSInteger)precision { NSNumber *numberValue = [self numberFromSsortingng:ssortingng]; if (numberValue) { NSSsortingng *formatSsortingng = [NSSsortingng ssortingngWithFormat:@"%%.%ldf", (long)precision]; return [NSSsortingng ssortingngWithFormat:formatSsortingng, numberValue.floatValue]; } else { /* return original ssortingng */ return ssortingng; } } 

par exemple

 [TSPAppDelegate ssortingngByFormattingSsortingng:@"2.346324" toPrecision:4]; 

=> 2,3453

 [TSPAppDelegate ssortingngByFormattingSsortingng:@"2.346324" toPrecision:0]; 

=> 2

 [TSPAppDelegate ssortingngByFormattingSsortingng:@"2.346324" toPrecision:2]; 

=> 2,35 (arrondi)

Une autre méthode pour Swift (sans utiliser NSSsortingng):

 let percentage = 33.3333 let text = Ssortingng.localizedSsortingngWithFormat("%.02f %@", percentage, "%") 

PS cette solution ne fonctionne pas avec le type CGFloat seulement testé avec Float & Double

Utilisez NSNumberFormatter avec maximumFractionDigits comme ci-dessous:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.maximumFractionDigits = 2; NSLog(@"%@", [formatter ssortingngFromNumber:[NSNumber numberWithFloat:12.345]]); 

Et vous aurez 12.35

Si vous devez également flotter la valeur:

 NSSsortingng* formattedNumber = [NSSsortingng ssortingngWithFormat:@"%.02f", myFloat]; float floatTwoDecimalDigits = atof([formattedNumber UTF8Ssortingng]); 
  lblMeter.text=[NSSsortingng ssortingngWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];