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 Aqbanking-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/aqbanking-devel