Arrondir les nombres en Objective-C

J’essaie de faire un certain nombre d’arrondi et de conversion en chaîne pour améliorer la sortie d’un programme Objective-C.

J’ai une valeur flottante que je voudrais arrondir à 0,5 près, puis l’utiliser pour définir le texte sur une étiquette.

Par exemple:

1.4 serait une chaîne de: 1.5

1.2 serait une chaîne de: 1

0.2 serait une chaîne de: 0

J’ai passé du temps à chercher sur Google pour obtenir une réponse mais, étant un noob avec Objective-C, je ne sais pas trop quoi chercher! Donc, j’apprécierais vraiment un pointeur dans la bonne direction!

Merci, Ash

Merci à tous pour les conseils, j’ai réussi à trouver une solution:

float roundedValue = round(2.0f * number) / 2.0f; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:1]; [formatter setRoundingMode: NSNumberFormatterRoundDown]; NSSsortingng *numberSsortingng = [formatter ssortingngFromNumber:[NSNumber numberWithFloat:roundedValue]]; [formatter release]; 

Le travail ci-dessus fonctionne pour les cas de test que j’ai lancés, mais si quelqu’un sait une meilleure façon de le faire, je serais intéressé de l’entendre!

 float floatVal = 1.23456; 

Arrondi

 int roundedVal = lroundf(floatVal); NSLog(@"%d",roundedVal); 

Arrondir

 int roundedUpVal = ceil(floatVal); NSLog(@"%d",roundedUpVal); 

Arrondir

 int roundedDownVal = floor(floatVal); NSLog(@"%d",roundedDownVal); 
 NSSsortingng *numberSsortingng = [NSSsortingng ssortingngWithFormat:@"%f", round(2.0f * number) / 2.0f]; 

Utilisez lroundf () pour arrondir un nombre entier à un nombre entier, puis convertissez le nombre entier en chaîne.

 NSSsortingng *numberSsortingng = [NSSsortingng ssortingngWithFormat:@"%d",lroundf(number)]; 

Je recommande de regarder en utilisant NSNumberFormatter .

un moyen simple:

 float theFloat = 1.23456; int rounded = roundf(theFloat); NSLog(@"%d",rounded); int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); // Note: int can be replaced by float 
 NSSsortingng *intNumberSsortingng = [NSSsortingng ssortingngWithFormat:@"%d", (int)floatNumber]; 

Suivre la technique a travaillé pour moi dans une application financière.

  NSSsortingng *dd=[NSSsortingng ssortingngWithFormat:@"%0.2f",monthlyPaymentCalculated]; monthlyPaymentCalculated=[dd doubleValue]; self.monthlyPaymentCritical=monthlyPaymentCalculated; 

ce qui est fait est que tout d’abord est arrondi avec% 0.2f et stocké dans NSSsortingng alors je l’ai simplement converti à nouveau en double et le résultat était bon pour mon calcul.

Avec ces fonctions, vous pouvez arrondir à n’importe quelle valeur. Si vous utilisez p = 2, vous obtenez des nombres pairs.

 float RoundTo(float x, float p) { float y = 1/p; return int((x+(1/(y+y)))*y)/y; } float RoundUp(float x, float p) { float y = 1/p; return int((x+(1/y))*y)/y; } float RoundDown(float x, float p) { float y = 1/p; return int(x*y)/y; } 

Je devais pouvoir arrondir à un chiffre spécifique (pas nécessairement à des entiers entiers). J’ai créé une catégorie NSNumber (basée sur la réponse de Ash ) et y ai ajouté la méthode suivante:

 - (NSSsortingng *)ssortingngByRounding:(NSNumberFormatterRoundingMode)roundingMode toPositionRightOfDecimal:(NSUInteger)position { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:position]; [formatter setRoundingMode:roundingMode]; NSSsortingng *numberSsortingng = [formatter ssortingngFromNumber:self]; return numberSsortingng; } 

Ce qui me permet de l’utiliser comme ça:

 [aNumber ssortingngByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2]; 

Je peux l’utiliser pour arrondir à des entiers en passant à 0 comme second paramètre:

 [aNumber ssortingngByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];