Ich frage mich, was ist der Sinn von NSDecimalNumber. Es bietet einige arithmetische Methoden, aber warum sollte ich NSDecimalNumber verwenden und nicht nur double oder NSNumber? Hat Apple dort Gleitkomma-Arithmetik-Hässlichkeit behandelt? Würde es das Leben leichter machen, wenn man hohe Präzision und große Fließkomma-Berechnungen verwendet?Ist es eine gute Idee, NSDecimalNumber für Fließkomma-Arithmetik anstatt einfach doppelt zu verwenden?
Antwort
Dies hängt alles oder Ihre Bedürfnisse. Es ist ein Kompromiss zwischen Genauigkeit, Geschwindigkeit und Größe der Daten.
Wenn Sie eine Buchhaltungsanwendung schreiben, können Sie keine Genauigkeit verlieren und daher die NSDecimal-Nummer verwenden.
Ig du machst komplexe numerische Analyse die Geschwindigkeit könnte wichtig sein und so NSDecimalNumber wäre zu langsam. Aber selbst in diesem Fall würde Ihre Analyse auf die Präzision und Fehler schauen, die Sie sich leisten könnten, und hier könnte es Fälle geben, in denen Sie mehr Präzision benötigen, die Sie verdoppelt.
NSNumber ist ein separater Fall, es ist ein Klassencluster zum Speichern von C-Typ-Nummern in anderen Objekten und andere Verwendung in Cocoa.
NSDecimalNumber ist eine feste (und skalierbare) Ganzzahl, die auf eine bestimmte Größe skaliert wird, um Bruchzahlen darzustellen. Dies ist ein wenig anders als eine Gleitkommazahl (wo der Punkt offensichtlich schwebt ...)
Als Beispiel, sagen Sie, dass Sie Geld von 0,00 bis 999,99 darstellen müssen, könnten Sie dies in einer Ganzzahl von 0 speichern zu 99999 als eine Menge in Pennies. Die Skalierung (in Ziffern) ist 2 und die Genauigkeit ist 5. In einer Gleitkommazahl mit Genauigkeit 5 und einem Fließkomma können Sie beispielsweise von .00001 bis 99999 darstellen, aber nicht für 999.999.
Wenn Ihre Software mit Geld oder anderen nicht ganzzahligen Zahlen von Interesse für Wirtschaftsprüfer arbeitet, sind Sie gut beraten, dafür Dezimalzahlen zu verwenden (anstelle der binären, für die die zugrunde liegende HW optimiert ist); Aus diesem Grund werden alle Arten von Mehrzwecksprachen und -datenbanken nach hinten gebogen, um nicht-ganzzahlige Dezimalzahlen zu unterstützen, nicht nur binäre. Das Runden von Problemen mit binären Nicht-Ganzzahlen könnte leicht zu Bruchteilen eines Cent-Diskrepanzes führen, was am Limit sogar zu rechtlichen Problemen führen könnte, und realistischerweise von Buchhaltern und anderen Beteiligten wahrgenommen werden ! mit Geld & c als Fehler in Ihrem Programm, egal, wie standhaft kann man argumentieren, sonst -)
ein "binary non-integer" wäre ein Doppel, zum Beispiel? –
IRTFM: Floats und Doubles (doubles sind nur breitere Floats) sind beide binäre Nicht-Integer-Typen. Manchmal werden Ganzzahlen wie binäre Nicht-Ganzzahlen verwendet, wenn nur eine bestimmte Menge an Genauigkeit benötigt wird (Beispiel: Verwenden einer 64-Bit-Ganzzahl zur Darstellung von Zehntel Cent) – rpetrich
Yep-, Float- oder Festkommazahlen beliebiger Breite. Sogar ein einfacher Wert von 0,1 kann nicht exakt im binären Gleitkomma- oder Fixpunkt irgendeiner endlichen Breite dargestellt werden. "Arbeit mit ganzen Zahlen von Cents" und dergleichen lässt Sie immer noch in einem Pickle wrt zusammengesetzte Zinsen, Hypothekenpläne usw. –
- 1. Ist es eine gute Idee, BootFaces & PrimeFAces zusammen zu verwenden?
- 2. Ist es eine gute Idee, statische Klasse AppContext zu verwenden?
- 3. Ist es eine gute Idee, NSNumberFormatterBehavior10_4 über NSNumberFormatterBehaviorDefault zu bevorzugen?
- 4. Ist es eine gute Idee, eine Python-Klasse zu hashen?
- 5. Ist eine gute Idee, Couchbase mit Rails zu verwenden?
- 6. Ist MSMQ eine gute Idee?
- 7. Django: Ist es eine gute Idee, JS dynamisch zu generieren?
- 8. Ist es eine gute Idee, Methoden zu Scala-Fallklassen hinzuzufügen
- 9. Ist es eine gute Idee, alte Schienen Migrationen zu reduzieren?
- 10. Ist es eine gute Idee, Schleifen für Rcpps NumericMatrix in C++ zu verwenden?
- 11. Ist es eine gute Idee, Zeichenfolgen für alle Datentypen in JSON zu verwenden?
- 12. Es ist eine gute Idee, Ruby für Socket-Programmierung zu verwenden?
- 13. Ist es eine gute Idee, eine berechnete Spalte als Teil eines Primärschlüssels zu verwenden?
- 14. Was ist MongoDBs strikter Modus und ist es eine gute Idee zu verwenden?
- 15. Ist es eine gute Idee, Database Mail als E-Mail-Relay-Server zu verwenden?
- 16. Verwenden Sie * dies eine gute Idee?
- 17. Ist es eine gute Idee, den REST-Webservice zum Hochladen von Dateien zu verwenden?
- 18. Ist es eine gute Idee, die gesamte rand() -Tabelle zu verwenden?
- 19. Ist es immer eine gute Idee, Assoziationslisten anstelle von Datensätzen zu verwenden?
- 20. Ist es eine gute Idee, für jeden Client in SQL Server eine andere Datenbank zu erstellen?
- 21. Wann ist es keine gute Idee, durch Referenz zu gehen?
- 22. MongoDB ist es eine gute Idee _id als Entity ID zu verwenden
- 23. Ist es eine gute Idee, MySQL und Neo4j zusammen zu verwenden?
- 24. Ist es eine gute Idee, eine schwere Datenbank (Datenspeicher) Aktivität Website eine gute Idee mit gwt + appengine?
- 25. Ist es eine gute Idee, jquery Funktion zu verwenden, die jede 500ms laufen?
- 26. Ist eine DLL kompatibel zu allen Datenbanken eine gute Idee
- 27. Ist es eine gute Idee, DataContractSerializer-Instanzen zwischenzuspeichern?
- 28. Ist es eine gute Idee, die Klasse als Namespace in Python zu verwenden
- 29. Ist es eine gute Idee, rowguid als eindeutigen Schlüssel im Datenbankdesign zu verwenden?
- 30. Ist eine gute Idee Mitgliedschaftsanbieter mit ASP.NET MVC verwenden
Diese Frage ist in der Nähe Ihres dabei: http://stackoverflow.com/questions/421463/should-i-use -nsdecimalnumber-to-Deal-with-money –