2010-08-13 3 views
10

J'ai double numéro dans un format comme 34.123456789. Comment puis-je le changer en 34.123?Ronde double en Objective-C

Je veux juste 3 chiffres après la virgule.

Répondre

21

Vous pouvez l'imprimer à 3 décimales avec [NSString stringWithFormat:@"%.3f",d].

Vous pouvez à peu près rond avec round(d*1000)/1000, mais bien sûr, ce n'est pas garanti pour être exact depuis 1000 n'est pas une puissance de 2.

+1

premier a travaillé pour moi ... :( mais peut-être juste stupide ...: D – cV2

7

Vous pouvez utiliser:

#include <math.h> 
: 
dbl = round (dbl * 1000.0)/1000.0; 

Il suffit de garder à l'esprit que les flotteurs et les doubles sont aussi proches une approximation que le type sous-jacent peut fournir. Il peut ne pas être exact.

6

La solution approuvée a une petite faute de frappe. Il manque le "%".

Voici la solution sans la faute de frappe et avec un peu de code supplémentaire.

double d = 1.23456; 
NSString* myString = [NSString stringWithFormat:@"%.3f",d]; 

myString sera "1.234".

+5

Vous peut éditer des réponses incorrectes ... –

+2

Et ne pas obtenir les votes? –

0

Si vous voulez faire

34.123456789 -> 34.123 
34.000000000 -> 34 not 34.000 

Vous pouvez utiliser NSNumberFormatter

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; 
[fmt setMaximumFractionDigits:3]; // 3 is the number of digits 

NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:34.123456789]]); // print 34.123 
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:34.000000000]]); // print 34