web-dev-qa-db-fra.com

Arrondir la valeur double à 2 décimales

J'ai une valeur double comme 22,368511 Je veux l'arrondir à 2 décimales. c'est-à-dire qu'il devrait retourner 22.37

Comment puis je faire ça?

87
testndtv

Comme dans la plupart des langues, le format est

%.2f

vous pouvez voir plus d'exemples ici


Edit: Je l'ai aussi si vous êtes préoccupé par l'affichage du point dans les cas de 25.00

{
    NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
    [fmt setPositiveFormat:@"0.##"];
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
    NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34
2010-08-22 15:04:10.616 a.out[6954:903] 25.3
2010-08-22 15:04:10.617 a.out[6954:903] 25
187
Jason Rogers

Vous pouvez utiliser le code ci-dessous pour le formater en deux décimales.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];

NSLog(@"Result...%@",numberString);//Result 22.37

Swift 4:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)
70
Saikiran K
 value = (round(value*100)) / 100.0;
28
krafter
[label setText:@"Value: %.2f", myNumber];
15
TigerCoding

Dans Swift 2.0 et Xcode 7.2:

let pi:Double = 3.14159265358979
String(format:"%.2f", pi)

Exemple:

enter image description here

11
Claudio Guirunas

Vous pouvez utiliser la fonction NSDecimalRound

11
Fruity Geek

Pour supprimer les décimales de votre double, jetez un oeil à cette sortie

Obj C

double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);

La sortie sera:

10.02 
10

Swift 2.1 et Xcode 7.2.1

let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))

La sortie sera:

3.14 
3
6
Radu Ursache

J'allais y aller avec la réponse de Jason mais j'ai remarqué que dans Ma version de Xcode (4.3.3), je ne pouvais pas le faire. Après quelques recherches, j'ai découvert qu'ils avaient récemment modifié les méthodes de classe et supprimé toutes les anciennes. alors voici comment je devais le faire:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
4
Kit Ramos

Pour Swift, il existe une solution simple si vous ne pouvez pas importer Foundation, utilisez round () et/ou ne voulez pas de chaîne (généralement le cas lorsque vous êtes dans Playground):

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

résultat: 31.726

2

Utiliser NSNumber * aNumber = [NSNumber numberWithDouble: number]; au lieu de NSNumber * aNumber = [NSNumber numberWithFloat: number];

+(NSString *)roundToNearestValue:(double)number
{
    NSNumber *aNumber = [NSNumber numberWithDouble:number];

    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setUsesGroupingSeparator:NO];
    [numberFormatter setMaximumFractionDigits:2];
    [numberFormatter setMinimumFractionDigits:0];
    NSString *string = [numberFormatter stringFromNumber:aNumber];        
    return string;
}
2
Coder_A_D

Vous pourriez faire ceci:

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
0
Hoang Minh