2010-10-11 1 views
1

Cela semble vraiment simple mais je ne peux pas voir que NSNumberFormatter a une fonction pour cela qui est étrange. J'ai un numéro, disons 4.1. Je veux arrondir cela à 5. Je me suis dit que si j'utilisais NSNumberFormatter et que je définissais le roundingMode sur NSNumberFormatterRoundUp, j'obtiendrais le résultat désiré. Mais la seule façon dont j'ai l'air de pouvoir faire tourner mon numéro maintenant est soit stringFromNumber ou numberFromString. Il semble étrange que je ne peux pas garder un numéro. Je sais que je pourrais juste convertir la chaîne à un certain nombre mais cela semble être un tel gaspillage. Je voulais savoir s'il y avait une façon différente (round() ne serait pas arrondi si le nombre était de 4,1) ou s'il y a une méthode que j'ai ratée en regardant la classe ref.Numéro rond en utilisant NSNumberFormatter sans utiliser de chaînes

Vive

+0

o_o .... Quelle est la raison pour laquelle vous voudriez arrondir 4.1 à 5? Juste curieux. Vous ne voulez pas que le nombre dépasse 4,5 puis 5? – Pavan

+1

Les formateurs sont toujours utilisés pour convertir des données de et vers des chaînes. Il y a probablement une fonction de bibliothèque pour faire ce que vous voulez, je jetterai un coup d'oeil rapide, mais maintenant votre titre demande quelque chose de déraisonnable. – zem

+1

@Pavan - Il est à des fins d'interface utilisateur, si son 4.1 je nécessite 5 lignes, si son 3.9, je nécessite 4 lignes – Rudiger

Répondre

5

Vous pouvez utiliser la fonction standard c ceil

CGFloat number = 4.1; 
CGFloat roundedUp = ceil(number); // Will be 5.0 
+0

Voir http://www.codecogs.com/reference/c/math.h/ceil.php – AlcubierreDrive

+0

Assurez-vous 'number' est un float et pas un NSNumber, cependant. Sinon, utilisez '[nombre floatValue]'. –

+0

Cheers, travaillé comme un charme. J'ai été troublé pendant une seconde, mais tous mes numéros étaient int, changés en un double pour que ça calcule bien – Rudiger

2

Vous pouvez utiliser les fonctions natives C dans Objectif C. Qu'est-ce que vous êtes après est-ceil(). Si vous avez déjà un NSNumber, vous pouvez utiliser les méthodes d'objet telles que floatValue pour obtenir un C float natif.

float num = [ns_number floatValue]; 
num = ceil(num);