83 votes

Comment ajouter deux NSNumber objets?

Maintenant, cela doit être facile, mais comment peut-somme de deux NSNumber? C'est comme:

[one floatValue] + [two floatValue]

ou existe une meilleure façon?

147voto

Louis Gerbarg Points 33025

Il n'est pas vraiment une meilleure façon, mais vraiment vous ne devriez pas faire cela si vous pouvez l'éviter. NSNumber existe comme un wrapper scalaires et les numéros de sorte que vous pouvez les stocker dans des collections et de les transmettre polymorphically avec les autres NSObjects. Ils ne sont pas vraiment utilisés pour stocker des nombres réels de mathématiques. Si vous faire des maths sur eux, c'est beaucoup plus lent que l'exécution de l'opération sur les scalaires, ce qui est probablement la raison pour laquelle il n'existe pas de méthodes pratiques pour cela.

Par exemple:

NSNumber *sum = [NSNumber numberWithFloat:([one floatValue] + [two floatValue])];

Souffle à un minimum de 21 instructions sur message dépêches, et bien que le code des méthodes à prendre pour unbox et la boîte de foyer les valeurs (probablement quelques centaines) de faire instruction 1 la valeur de mathématiques.

Donc, si vous avez besoin de stocker des nombres dans dicts utiliser un NSNumber, si vous avez besoin de passer à quelque chose qui pourrait être un nombre ou une chaîne de caractères en fonction de l'utilisation d'un NSNumber, mais si vous voulez juste faire des maths bâton avec scalaire C types.

50voto

Semmel Points 476

NSDecimalNumber (sous-classe de NSNumber) a tous les goodies que vous cherchez:

– decimalNumberByAdding:
– decimalNumberBySubtracting:
– decimalNumberByMultiplyingBy:
– decimalNumberByDividingBy:
– decimalNumberByRaisingToPower:

...

Si le calcul de la performance est de l'intérêt, puis convertir en C++ tableau std::vector ou comme.

Maintenant je n'utilise jamais de C-Tableaux plus; c'est trop facile de s'écraser à l'aide d'un faux indice ou un pointeur. Et très fastidieux à chaque paire [nouveau] avec delete[].

12voto

nemesis Points 589

Vous pouvez utiliser

NSNumber *sum = @([first integerValue] + [second integerValue]);

Edit: Comme l'a observé ohho, cet exemple est pour ajouter deux NSNumber instances qui détiennent des valeurs entières. Si vous souhaitez ajouter deux NSNumber's qui détiennent des valeurs à virgule flottante, vous devez effectuer les opérations suivantes:

NSNumber *sum = @([first floatValue] + [second floatValue]);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X