2009-05-21 6 views
1

Also versuche ich ein paar Dinge mit Zahlen in Objective C zu tun und stelle fest, dass es eine Fülle von Optionen gibt, und ich bin nur verwirrt darüber, welchen Typ ich verwenden soll AppWie benutzt man die verschiedenen Zahlentypen in Objective C

also hier sind die Typen.

  • NSNumber (das ist eine Klasse)
  • NSDecmial (das ein struct)
  • NSDecimalNumber (die eine Klasse ist)
  • float/double (die primitive Typen)

so im Wesentlichen, was ich tun muss, ist ein NSString, der dezimale Stunden darstellt. (10.4 würde 10 Stunden und (4/10) * 60 Minuten) und wandelt es in:

  1. ein String-Darstellung DH: M (dies muss Division, Multiplikation und Grund arithmatic)
  2. eine Anzahl Typen letztere Speicher für einfache Berechnungen (wird meist zwischen NSTimeIntervals umstellen und dabei Subtraktionen)

Oh, und ich muss in der Lage sein einen Absolutwert als auch auf diesen

zu tun, scheint es, dass der schwierige Teil ist eigentlich Übergang zwischen den Typen.

Für mich ein sehr triviales Problem ist so: "Ich bin nicht sicher, ob seine spät oder weil objektive C numerische Typen saugen, aber ich konnte eine Hand verwenden.

Antwort

5

Verwenden primitive Typen (Doppel, CGFloat, NSInteger) für typische Arithmetik und wenn Sie eine Zahl als eine Instanzvariable speichern müssen, die in erster Linie für Arithmetik an anderen Stellen verwendet werden soll.Sie können C mathematische Funktionen (abs(), pow(), usw.) wie benötigt verwenden.NSTimeInterval ist ein typedef für double, also können Sie die zwei austauschen

Verwenden Sie NSNumber, wenn Sie eine Zahl als ein Objekt speichern müssen, beispielsweise wenn Sie ein NSArray von Zahlen erstellen Einige Teile von Cocoa wie Core Data oder key Wertcodierung dea Wenn Sie mehr mit NSNumber als mit primitiven Typen arbeiten, können Sie NSNumber häufiger verwenden als in diesen Situationen üblich. Wenn Sie z. B. [timeKeepersArray valueForKeyPath:@"sum.seconds"] schreiben, erhalten Sie eine NSNumber zurück, so dass es möglicherweise einfacher ist, diese Variable beizubehalten, anstatt sie in ein primitives Element umzuwandeln.

Da es eine kleine Menge zusätzlichen Codes ist, um zwischen NSNumber und primitiven Typen zu konvertieren, wird Ihre Anwendung normalerweise die eine oder andere bevorzugen, je nachdem, was Sie mit Zahlen machen.

Oh, und NSDecmial und NSDecimalNumber? Sorgen Sie sich nicht zu sehr um sie, sie kommen nur dann zum Vorschein, wenn Sie sehr genaue Dezimaloperationen benötigen, etwa wenn Sie Finanzdaten speichern.