2009-08-26 4 views
0

Ich habe ein paar Doubles, die ich in NSDecimalNumber portieren möchte, weil ich mit ihnen Gleitkomma-Arithmetikfehler bekomme.Wie portiere ich diese Doppel in eine NSDecimalNumber?

Sie sind:

double one = 0.0000001; 
double two = 1000000000.0000001; 

Sie sind sehr problematisch, aber ich hoffe, dass NSDecimalNumber helfen können Berechnungen richtig zu machen. Ich bin nicht so ein großes Mathe-Genie, also frage ich mich, wie ich die richtige Eingabe für diese Methode von NSDecimalNumber bereitstellen kann.

Lassen Sie mich versuchen:

NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:-7 isNegative:NO]; 

NSDecimalNumber *two = [NSDecimalNumber decimalNumberWithMantissa:10000000000000001 exponent:-7 isNegative:NO]; 

Ich fühle, dass falsch ist. Ich konnte nur raten. Die Dokumentation bietet dazu nicht viele Informationen. Aber soweit ich es verstehe, ist die "Mantisse" eine ganze Zahl und der Exponent gibt an, wo der Fließkommawert sein sollte, indem er Nullen hinzufügt. Wahrscheinlich ist das auch falsch ;-)

Ich habe ein paar Codeschnipsel gesehen, wo Leute nur einen CGFloat als Mantisse gefüttert haben und eine 0 als Exponent geliefert haben, aber ich kann nur raten, was ihre Absicht war, also kann ich es nicht tun es genauso, ohne es zu verstehen.

Irgendeine Idee?

Antwort

0

Ab der reference der Klasse werden Zahlen als mantissa x 10^exponent dargestellt.

Also, Sie sind ziemlich richtig mit Ihren Annahmen.

Ihre Nummer ist in erster Linie die mantissa. Der Dezimalpunkt liegt hinter Ihrer Nummer und wird nach rechts geschoben exponent mal (wenn der Exponent positiv ist, werden Nullen hinzugefügt, da die Punkte auf der rechten Seite bleiben). Am Ende wird ein Minuszeichen vor Ihre Nummer gemäß dem Flag gesetzt.

So zum Beispiel, wenn Sie 123 * 10^(-3) haben, beginnt es mit 123., geht über 12.3 und 1.23-0.123, wo das Komma drei Ziffern vor

Hinweis links ist, dass diese Art hat auch Einschränkungen. Die reference zeigen sie:

[...] wo Mantisse eine ganze Dezimalzahl bis zu 38 digits long sind, und Exponent eine ganze Zahl von –128 durch 127

Vielleicht Wikipedia ist in der Lage, die wissenschaftlichen zu erklären Notation von Zahlen besser, die genau das ist, was Sie hier verwenden müssen :-)

+0

danke Etan, ich denke meine alten Schule Erinnerungen kommen jetzt zurück. Nur dieses negative Exponent Ding ist mir nicht zu klar. Wenn meine Mantisse 123 ist und mein exp -3 ist, würde ich dann eine Zahl wie 0,00haben? –

+0

10^-3 ist 0,001, nicht 0,0001, also wenn deine Mantisse 1,23 ist und deine Exp -3 ist, hättest du 0,00123. –

+0

Wenn Mantisse 123 und Exp -3 wäre das 0,123 –

Verwandte Themen