2010-07-14 5 views
4

Cela peut être une question facile, mais je ne suis pas en mesure de trouver la logique.Comment faire pour arrondir les valeurs décimales dans l'objectif C

Je reçois les valeurs comme ce

12,010000 12,526000 12,000000 12,500000

Si je reçois la valeur 12,010000 je dois afficher 12,01

Si je reçois la valeur 12,526000 je dois affichage 12.526

Si j'obtiens la valeur 12.000000 je dois afficher 12

Si je reçois la valeur 12,500000 je dois afficher 12,5

peut me aider s'il vous plaît

Merci

+0

Quelles sont ces valeurs? 'float'? NSNumber? NSDecimalNumber? Que voulez-vous dire par "affichage"? Convertir en NSString? Imprimer sur la console? NSLog? – kennytm

+0

En fait, je l'obtiens comme NSString je peux les convertir en float. Afficher signifie que je dois afficher ces valeurs en les convertissant en nsstring – kiri

Répondre

4

Essayez ceci:

 
[NSString stringWithFormat:@"%g", 12.010000] 
[NSString stringWithFormat:@"%g", 12.526000] 
[NSString stringWithFormat:@"%g", 12.000000] 
[NSString stringWithFormat:@"%g", 12.500000] 
3
float roundedValue = 45.964; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setRoundingMode: NSNumberFormatterRoundUp]; 

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

NSLog(numberString); 
[formatter release]; 

Quelques modifications que vous pouvez need-

// You can specify that how many floating digit you want as below 
[formatter setMaximumFractionDigits:4];//2]; 

// You can also round down by changing this line 
[formatter setRoundingMode: NSNumberFormatterRoundDown];//NSNumberFormatterRoundUp]; 

Référence: Une question sur StackOverFlow

+0

Salut Sadat merci pour votre réponse. J'ai essayé ce code mais quand je passe la valeur flottante 12.526000, j'obtiens la valeur 12.57 dans le "NSString * numberString", mais je dois obtenir 12.526 dans la valeur de chaîne, même que pour 12.010000 je reçois 12.02 mais j'ai pour obtenir 12.01. Merci – kiri

+0

Modification de cette ligne: [formatter setMaximumFractionDigits: 2]; placez 3 au lieu de 2. – Sadat

0

Il est évident que la solution de taskinoor est le meilleur, mais vous avez mentionné que vous ne trouvez pas la logique de le résoudre ... voici donc la logique. Vous parcourez en fait les caractères dans l'ordre inverse en recherchant un caractère non nul ou un caractère de période, puis créez une sous-chaîne en fonction de l'endroit où vous trouvez l'un ou l'autre des caractères.

-(NSString*)chopEndingZeros:(NSString*)string { 
    NSString* chopped = nil; 
    NSInteger i; 
    for (i=[string length]-1; i>=0; i--) { 
     NSString* a = [string substringWithRange:NSMakeRange(i, 1)]; 
     if ([a isEqualToString:@"."]) { 
      chopped = [string substringToIndex:i]; 
      break; 
     } else if (![a isEqualToString:@"0"]) { 
      chopped = [string substringToIndex:i+1]; 
      break; 
     } 
    } 
    return chopped; 
} 
+0

Merci pour la réponse – kiri

Questions connexes