On Tue, Sep 16, 2008 at 2:40 PM, Charles Day <[EMAIL PROTECTED]> wrote:
> On Tue, Sep 16, 2008 at 10:54 AM, Charles Day <[EMAIL PROTECTED]> wrote: > >> On Tue, Sep 16, 2008 at 9:38 AM, Andreas Köhler <[EMAIL PROTECTED]> wrote: >> >>> Hi, >>> >>> On Mon, 2008-09-01 at 22:09 +0200, Andreas Köhler wrote: >>> > Hi Charles, >>> > >>> > On Sun, 2008-07-27 at 11:33 -0400, Charles Day wrote: >>> > > Trac: http://svn.gnucash.org/trac/changeset/17421 >>> > > Log: >>> > > Add a new function to the gnc_numeric library that converts >>> denominators to exact powers of ten. >>> > >>> > > Modified: gnucash/trunk/lib/libqof/qof/gnc-numeric.c >>> > > =================================================================== >>> > > --- gnucash/trunk/lib/libqof/qof/gnc-numeric.c 2008-07-27 >>> 15:11:19 UTC (rev 17420) >>> > > +++ gnucash/trunk/lib/libqof/qof/gnc-numeric.c 2008-07-27 >>> 15:33:23 UTC (rev 17421) >>> > > + fraction = converted_val.denom; >>> > > + if (fraction <= 0) >>> > > + return FALSE; >>> > >>> > out of curiosity, what is the reason for disallowing negative >>> > denominators? I am not sure whether there is a gnc_numeric API >>> function >>> > to switch signs of nom and denom safely, but I am sure that doing it is >>> > possible :-) But maybe the current behavior is actually desired. >>> >>> I just noticed that ignoring negative denominators means that 1/(-10) is >>> now printed as "1 * 10", where it was printed as "10.00" before. Is >>> that a regression we have to fix or not? >>> >> >> I can see how that would happen, because in previous versions, non-decimal >> fractions were forced to print in decimal form in some places. So even >> though the old routines considered 1/(-10) non-decimal, it would print it as >> decimal anyway. I think this takes us back to the original discussion. >> Should go ahead and add support for negative denominators to >> gnc_numeric_to_decimal()? I must only take less than 5 lines of code. >> > > Here's the first attempt at that change. How are you testing these numbers? > I went ahead and committed this change in r17554. Calling gnc_numeric_to_decimal on 4/-3 now gets you 12. However, there is an overflow danger because gnc_numeric_convert() doesn't check for that (apparently this has been a problem for some time). Someone else should probably look at that, as I am no expert on 64-bit/128-bit math. -Charles > $ svn diff > Index: gnc-numeric.c > =================================================================== > --- gnc-numeric.c (revision 17505) > +++ gnc-numeric.c (working copy) > @@ -1043,7 +1043,14 @@ > > converted_val = *a; > if (converted_val.denom <= 0) > - return FALSE; > + { > + converted_val = gnc_numeric_convert(converted_val, 1, > GNC_DENOM_EXACT); > + if (gnc_numeric_check(converted_val) != GNC_ERROR_OK) > + return FALSE; > + *a = converted_val; > + *max_decimal_places = decimal_places; > + return TRUE; > + } > > /* Zero is easily converted. */ > if (converted_val.num == 0) > > >> >> >>> Ciao, >>> -- andi5 >>> >> >> Cheers, >> Charles >> > > _______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
