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)
-------------------------------------------------------------

Attachment: 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

Reply via email to