2009-08-26 16 views
1

Ich möchte einige ziemlich komplexe Arithmetik tun, die sehr hohe Präzision erfordern, dhWie kann sichergestellt werden, dass eine NSDecimalNumber keine Nachkommastellen darstellt?

10000000000 + 0,00000000001 = 10000000000,00000000001 10000000000,00000000001 * 3 = 30000000000,00000000003

Ich möchte Berechnung NSDecimalNumber für diese Art von Mathematik verwenden, aber die Problem ist: Wie füttere ich es mit diesen Werten?

Die Dokumentation sagt:

- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag 

Das erste Problem sehe ich die Mantisse ist. Es erfordert eine nicht signierte lange long. Wie ich diesen Datentyp verstehe, ist es ein Fließkomma, oder? Wenn dies der Fall ist, ist der eingegebene Wert bereits "schmutzig". Es hat möglicherweise unerwünschte Nachkommastellen irgendwo am Ende davon. Ich konnte keine gute Dokumentation über "unsigned long long" von Apple finden, aber ich erinnere mich an einen Code-Ausschnitt, wo jemand die Mantisse mit einem CGFloat gespeist hat, deshalb nehme ich an, dass es ein Fließkommatyp ist.

Nun, wenn es tatsächlich ein Super-Fließkomma-Datentyp ist, dann ist die schwierige Frage: Wie bekomme ich eine saubere, wirklich saubere Ganzzahl in dieses Ding? So sauber, dass ich es um eine halbe Billion multiplizieren könnte, ohne falsche Ergebnisse zu bekommen?

Gibt es gute Tutorials zur Verwendung von NSDecimalNumber in der Praxis?

Edit: Kein Problem hier! Danke allen!

+1

unsigned long lang ist kein Fließkommatyp, es ist eine 64-Bit-Ganzzahl ohne Vorzeichen –

+0

groß! Das würde bedeuten, dass alle meine Probleme damit weg sind. Danke Doug! –

Antwort

1

Wenn Sie wirklich besorgt um in weniger präzisen Typen Fütterung, empfehle ich -initWithString: mit würde, -initWithString:locale:, +decimalNumberWithString: oder +decimalNumberWithString:locale:. Durch die Verwendung der String-Beschreibung wird vermieden, dass Sie die numerische Darstellung vor dem Generieren Ihrer NSDecimalNumber in einen Fließkommawert oder einen anderen numerischen Typ konvertieren müssen.

Verwandte Themen