2009-05-21 7 views
1

Alors j'essaie de faire quelques choses avec des nombres dans Objective C et de réaliser qu'il y a une pléthore d'options, et je suis juste perplexe quant au type à utiliser pour mon app.Comment utiliser les différents types de nombres dans l'objectif C

alors voici les types.

  • NSNumber (qui est une classe)
  • NSDecmial (qui est un struct)
  • NSDecimalNumber (qui est une classe)
  • float/double (qui sont des types primitifs)

donc essentiellement ce que je dois faire est de prendre un NSString, qui représente des heures basées sur la décimale. (10.4 serait de 10 heures et (4/10) * 60 minutes) et le convertir en:

  1. une chaîne représentant DH: M (ce besoin division, multiplication et arithmatic de base)
  2. un type de numéro à magasin pour les calculs faciles derniers (sera principalement convertira entre NSTimeIntervals et faire des soustractions)

Oh et je dois être en mesure de faire une valeur absolue et sur ces

Il semble que le plus dur est fait transition entre les types.

Pour moi, c'est un problème très trivial, donc je "ne sais pas si ça devient en retard ou parce que les types numériques objectif C sucent, mais je ne pouvais utiliser une main.

Répondre

5

Utilisez les types primitifs (double, CGFLoat, NSInteger) pour l'arithmétique typique et quand vous avez besoin de stocker un nombre comme une variable d'instance qui sera utilisée principalement pour l'arithmétique dans d'autres endroits.Vous pouvez utiliser les fonctions mathématiques de C (abs(), pow(), etc) si nécessaire. Si vous créez un NSArray de nombres, utilisez NSNumber pour stocker un nombre comme objet, par exemple si vous créez un NSArray de nombres. valeur codage dea l plus avec NSNumber que les types primitifs, donc vous pouvez vous retrouver en utilisant NSNumber plus que d'habitude dans ces situations. Par exemple, si vous écrivez [timeKeepersArray valueForKeyPath:@"sum.seconds"], vous obtiendrez un NSNumber, donc vous trouverez peut-être plus facile de conserver cette variable au lieu de la convertir en primitive.

Comme il s'agit d'une petite quantité de code supplémentaire à convertir entre les types NSNumber et primitif, votre application finira généralement par favoriser l'un ou l'autre en fonction de ce que vous faites avec les nombres.

Oh, et NSDecmial et NSDecimalNumber? Ne vous en faites pas trop, ils n'apparaissent que lorsque vous avez besoin d'opérations décimales très précises, par exemple si vous stockez des données financières.

Questions connexes