On Thursday 06 December 2007 13:34:51 Martin Preuss wrote: > Moin, > > On Donnerstag, 6. Dezember 2007, Micha Lenk wrote: > [...] > > > > Hmm, ja, ich werde das mal aendern. Ich benutze in einem anderen > > > Projekt naemlich auch gmp, und da parse ich die Zahlen selbst: Ich lese > > > alles bis zum Komma ein, wenn das Komma kommt fange ich an die > > > Nachkommastellen mitzuzaehlen, lese aber trotzdem weiter in den > > > Numerator. Anschliessend erzeuge ich einen Denominator aus 10*Anzahl > > > der Nachkommastellen. > > > > Korrekt wäre, den Denominator aus 10 hoch Anzahl der Nachkommastellen zu > > bilden. Oder ist dein Denominator bei zwei Nachkommastellen wirklich 20? > > Ich vermute aber mal, dass du es so gemeint hattest. > > [...] > > Ja klar, 10^(Anzahl der Nachkommastellen) war auch gemeint :-) > > Das ist im SVN inzwischen auch drin. Die Funktionen > AB_Value_GetDenomString() und AB_Value_Canonicalize() werde ich wohl wieder > entfernen. Letztere wird eigentlich gar nicht benoetigt, weil die intern eh > immer aufgerufen wird, und erstere braucht man eigentlich ja auch nicht...
Genau. Sieht auch schon ein wenig besser aus. Allerdings funktionieren die
Getter Funktionen noch nicht so richtig.
6:2007/12/06 13-45-27:(null)(14222):mymoneybanking.cpp: 597: Importing
balance
Value: 1250 (1250.00 EUR)
num = 1250 (4e2)
denom = 1 (1)
MyMoneyMoney(1250/1)
MyMoneyMoney(1.250,0000)
6:2007/12/06 13-45-27:(null)(14222):mymoneybanking.cpp: 533: Adding
transaction
Value: -1250 (-1250.00 EUR)
num = -28750 (ffffffffffff8fb2)
denom = 1 (1)
MyMoneyMoney(-28750/1)
MyMoneyMoney(-28.750,0000)
6:2007/12/06 13-51-30:(null)(20131):mymoneybanking.cpp: 533: Adding
transaction
Value: 136791/100 (1367.91 EUR)
num = 136791 (21657)
denom = 65536 (10000)
MyMoneyMoney(136791/65536)
MyMoneyMoney(2,0873)
Wenn ich das ganze mit der von mir geschriebenen (und Martin per Patch zur
Verfügung gestellten) AB_Value_GetRational() Funktion verarbeite geht es
prima:
6:2007/12/06 13-49-02:(null)(17212):mymoneybanking.cpp: 597: Importing
balance
Value: 1250 (1250.00 EUR)
num = 1250 (4e2)
denom = 1 (1)
MyMoneyMoney(1250/1)
MyMoneyMoney(1.250,0000)
6:2007/12/06 13-49-02:(null)(17212):mymoneybanking.cpp: 533: Adding
transaction
Value: -1250 (-1250.00 EUR)
num = -1250 (fffffffffffffb1e)
denom = 1 (1)
MyMoneyMoney(-1250/1)
MyMoneyMoney(-1.250,0000)
6:2007/12/06 13-49-02:(null)(17212):mymoneybanking.cpp: 533: Adding
transaction
Value: 136791/100 (1367.91 EUR)
num = 136791 (21657)
denom = 100 (64)
MyMoneyMoney(136791/100)
MyMoneyMoney(1.367,9100)
Der Code dazu sieht folgendermassen aus (mache ich da wieder was falsch?)
int64_t num = AB_Value_GetNumerator(val);
int64_t denom = AB_Value_GetDenominator(val);
// AB_Value_Canonicalize(val);
// AB_Value_GetRational(val, &num, &denom);
fprintf(stderr, "num = %ld (%lx)\n", num, num);
fprintf(stderr, "denom = %ld (%lx)\n", denom, denom);
Wenn AB_Value_GetRational() aktiv ist funktioniert das alles.
--
Regards
Thomas Baumgart
GPG-FP: E55E D592 F45F 116B 8429 4F99 9C59 DB40 B75D D3BA
-------------------------------------------------------------
With every day I come closer to the grave and learn something new.
It all happens because I have wandered around too much and stumbled into
the Linux world - which is a fantastic place to be! (Algis Kabaila)
-------------------------------------------------------------
signature.asc
Description: This is a digitally signed message part.
------------------------------------------------------------------------- SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future. http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________ Aqbanking-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/aqbanking-devel
