[Gnucash-changes] Audit use of gnc_numeric rounding and denom specification.

Linas Vepstas linas at cvs.gnucash.org
Sun Jun 27 13:56:03 EDT 2004


Log Message:
-----------
Audit use of gnc_numeric rounding and denom specification.
Change GNC_RND to GNC_HOW_RND

Modified Files:
--------------
    gnucash/src/engine:
        Account.c
        Scrub.c
        Scrub3.c
        Transaction.c
        engine-helpers.c
        qofquerycore.c

Revision Data
-------------
Index: Transaction.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Transaction.c,v
retrieving revision 1.310
retrieving revision 1.311
diff -Lsrc/engine/Transaction.c -Lsrc/engine/Transaction.c -u -r1.310 -r1.311
--- src/engine/Transaction.c
+++ src/engine/Transaction.c
@@ -674,9 +674,9 @@
   check_open (s->parent);
 
   s->amount = double_to_gnc_numeric(amt, get_commodity_denom(s),
-                                    GNC_RND_ROUND);
+                                    GNC_HOW_RND_ROUND);
   s->value  = double_to_gnc_numeric(price * amt, get_currency_denom(s),
-                                    GNC_RND_ROUND);
+                                    GNC_HOW_RND_ROUND);
 
   SET_GAINS_A_VDIRTY(s);
   mark_split (s);
@@ -691,9 +691,9 @@
   ENTER (" ");
   check_open (s->parent);
 
-  s->amount = gnc_numeric_convert(amt, get_commodity_denom(s), GNC_RND_ROUND);
+  s->amount = gnc_numeric_convert(amt, get_commodity_denom(s), GNC_HOW_RND_ROUND);
   s->value  = gnc_numeric_mul(s->amount, price, 
-                              get_currency_denom(s), GNC_RND_ROUND);
+                              get_currency_denom(s), GNC_HOW_RND_ROUND);
 
   SET_GAINS_A_VDIRTY(s);
   mark_split (s);
@@ -709,7 +709,7 @@
 
   s->value = gnc_numeric_mul(xaccSplitGetAmount(s), 
                              price, get_currency_denom(s),
-                             GNC_RND_ROUND);
+                             GNC_HOW_RND_ROUND);
 
   SET_GAINS_VDIRTY(s);
   mark_split (s);
@@ -722,7 +722,7 @@
   gnc_numeric old_price, old_amt;
   int commodity_denom = get_commodity_denom(s);
   gnc_numeric amt = double_to_gnc_numeric(damt, commodity_denom, 
-                                          GNC_RND_ROUND); 
+                                          GNC_HOW_RND_ROUND); 
   if (!s) return;
   ENTER (" ");
   check_open (s->parent);
@@ -732,16 +732,16 @@
   {
     old_price = gnc_numeric_div(xaccSplitGetValue (s), 
                                 old_amt, GNC_DENOM_AUTO,
-                                GNC_DENOM_REDUCE);
+                                GNC_HOW_DENOM_REDUCE);
   }
   else {
     old_price = gnc_numeric_create(1, 1);
   }
 
   s->amount = gnc_numeric_convert(amt, commodity_denom, 
-                                  GNC_RND_NEVER);
+                                  GNC_HOW_RND_NEVER);
   s->value  = gnc_numeric_mul(s->amount, old_price, 
-                              get_currency_denom(s), GNC_RND_ROUND);
+                              get_currency_denom(s), GNC_HOW_RND_ROUND);
 
   SET_GAINS_A_VDIRTY(s);
   mark_split (s);
@@ -757,7 +757,7 @@
         s->amount.num, s->amount.denom, amt.num, amt.denom);
 
   check_open (s->parent);
-  s->amount = gnc_numeric_convert(amt, get_commodity_denom(s), GNC_RND_ROUND);
+  s->amount = gnc_numeric_convert(amt, get_commodity_denom(s), GNC_HOW_RND_ROUND);
 
   SET_GAINS_ADIRTY(s);
   mark_split (s);
@@ -773,7 +773,7 @@
         s->value.num, s->value.denom, amt.num, amt.denom);
 
   check_open (s->parent);
-  s->value = gnc_numeric_convert(amt, get_currency_denom(s), GNC_RND_ROUND);
+  s->value = gnc_numeric_convert(amt, get_currency_denom(s), GNC_HOW_RND_ROUND);
 
   SET_GAINS_VDIRTY(s);
   mark_split (s);
@@ -1250,15 +1250,15 @@
     if(gnc_commodity_equiv(commodity, base_currency)) {
       s->amount = gnc_numeric_convert(value,
                                       get_commodity_denom(s), 
-                                      GNC_RND_NEVER);
+                                      GNC_HOW_RND_NEVER);
     }
     s->value = gnc_numeric_convert(value, 
                                    get_currency_denom(s),
-                                   GNC_RND_NEVER);
+                                   GNC_HOW_RND_NEVER);
   }
   else if (gnc_commodity_equiv(commodity, base_currency)) {
     s->amount = gnc_numeric_convert(value, get_commodity_denom(s),
-                                    GNC_RND_NEVER);
+                                    GNC_HOW_RND_NEVER);
   }
   else {
     PERR ("inappropriate base currency %s "
@@ -1356,12 +1356,12 @@
     if (gnc_commodity_equiv(currency, base_currency)) 
     {
       value = gnc_numeric_add(value, xaccSplitGetValue(s),
-                              GNC_DENOM_AUTO, GNC_DENOM_LCD);
+                              GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
     }
     else if (gnc_commodity_equiv(commodity, base_currency)) 
     {
       value = gnc_numeric_add(value, xaccSplitGetAmount(s),
-                              GNC_DENOM_AUTO, GNC_DENOM_LCD);
+                              GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
     }
     else {
       PERR ("inconsistent currencies\n"   
@@ -1377,7 +1377,7 @@
    * doesn't mean the denominators are the same! */
   value = gnc_numeric_convert (value,
                                 gnc_commodity_get_fraction (base_currency),
-                                GNC_RND_ROUND);
+                                GNC_HOW_RND_ROUND);
 
   LEAVE (" total=%lld/%lld", value.num, value.denom);
   return value;
@@ -1409,7 +1409,7 @@
     Account *a = xaccSplitGetAccount (s);
     if (a == account)
       total = gnc_numeric_add (total, xaccSplitGetValue (s),
-                               GNC_DENOM_AUTO, GNC_DENOM_LCD);
+                               GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
   }
   return total;
 }
@@ -1446,7 +1446,7 @@
     {
       Split *s = splits->data;
       s->value = gnc_numeric_convert(xaccSplitGetValue(s), 
-                 fraction, GNC_RND_ROUND);
+                 fraction, GNC_HOW_RND_ROUND);
       SET_GAINS_VDIRTY(s);
     }
   }
@@ -2006,7 +2006,7 @@
      gnc_numeric new_value;
 
      new_value = gnc_numeric_convert(xaccSplitGetValue(split), 
-                        fraction, GNC_RND_ROUND);
+                        fraction, GNC_HOW_RND_ROUND);
      if (gnc_numeric_check (new_value) == GNC_ERROR_OK)
        split->value = new_value;
        SET_GAINS_VDIRTY(split);
@@ -2842,8 +2842,8 @@
   }
   return gnc_numeric_div(val, amt,
                          GNC_DENOM_AUTO, 
-                         GNC_DENOM_SIGFIGS(PRICE_SIGFIGS) |
-                         GNC_RND_ROUND);
+                         GNC_HOW_DENOM_SIGFIGS(PRICE_SIGFIGS) |
+                         GNC_HOW_RND_ROUND);
 }
 
 /********************************************************************\
Index: Scrub.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -Lsrc/engine/Scrub.c -Lsrc/engine/Scrub.c -u -r1.60 -r1.61
--- src/engine/Scrub.c
+++ src/engine/Scrub.c
@@ -250,7 +250,7 @@
   value = xaccSplitGetValue (split);
 
   if (gnc_numeric_same (xaccSplitGetAmount (split),
-                        value, scu, GNC_RND_ROUND))
+                        value, scu, GNC_HOW_RND_ROUND))
   {
     return;
   }
@@ -398,7 +398,7 @@
      * of the denominators might already be reduced.  */
     new_value = gnc_numeric_sub (old_value, imbalance,
              gnc_commodity_get_fraction(currency), 
-             GNC_RND_ROUND);
+             GNC_HOW_RND_ROUND);
 
     xaccSplitSetValue (balance_split, new_value);
 
Index: Account.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Account.c,v
retrieving revision 1.274
retrieving revision 1.275
diff -Lsrc/engine/Account.c -Lsrc/engine/Account.c -u -r1.274 -r1.275
--- src/engine/Account.c
+++ src/engine/Account.c
@@ -895,7 +895,7 @@
    * denominator AKA 'SCU Smallest Currency Unit'. */
   /* xaccSplitSetAmount(split, old_amt); */
   split->amount = gnc_numeric_convert (old_amt,
-                xaccAccountGetCommoditySCU(acc), GNC_RND_ROUND);
+                xaccAccountGetCommoditySCU(acc), GNC_HOW_RND_ROUND);
   xaccTransCommitEdit(trans);
   xaccAccountCommitEdit(acc);
   LEAVE ("(acc=%p, split=%p)", acc, split);
@@ -1818,7 +1818,7 @@
   balance = xaccAccountGetXxxBalanceInCurrency (account, cb->fn, cb->currency);
   cb->balance = gnc_numeric_add (cb->balance, balance,
                                  gnc_commodity_get_fraction (cb->currency),
-                                 GNC_RND_ROUND);
+                                 GNC_HOW_RND_ROUND);
   return NULL;
 }
 
Index: engine-helpers.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/engine-helpers.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -Lsrc/engine/engine-helpers.c -Lsrc/engine/engine-helpers.c -u -r1.40 -r1.41
--- src/engine/engine-helpers.c
+++ src/engine/engine-helpers.c
@@ -1285,7 +1285,8 @@
       query_term_scm = SCM_CDR (query_term_scm);
       amount = scm_num2dbl (scm, __FUNCTION__);
 
-      val = double_to_gnc_numeric (amount, GNC_DENOM_AUTO, GNC_RND_ROUND);
+      val = double_to_gnc_numeric (amount, GNC_DENOM_AUTO, 
+                       GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND);
 
       if (!safe_strcmp (pr_type, "pr-price")) {
         xaccQueryAddSharePriceMatch (q, val, how, QOF_QUERY_OR);
Index: Scrub3.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Scrub3.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -Lsrc/engine/Scrub3.c -Lsrc/engine/Scrub3.c -u -r1.10 -r1.11
--- src/engine/Scrub3.c
+++ src/engine/Scrub3.c
@@ -94,7 +94,7 @@
   GNCPolicy *pcy;
 
   if (!lot) return FALSE;
-  ENTER (" ");
+  ENTER ("(lot=%p)", lot);
 
   acc = gnc_lot_get_account (lot);
   pcy = acc->policy;
@@ -103,6 +103,7 @@
 
   /* If the lot balance is zero, we don't need to rebalance */
   lot_baln = gnc_lot_get_balance (lot);
+  PINFO ("lot baln=%s", gnc_numeric_to_string (lot_baln));
   if (! gnc_numeric_zero_p (lot_baln))
   {
     SplitList *node;
@@ -110,6 +111,7 @@
 
     /* Get the opening balance for this lot */
     pcy->PolicyGetLotOpening (pcy, lot, &opening_baln, NULL, NULL);
+    PINFO ("lot opner baln=%s", gnc_numeric_to_string (opening_baln));
 
     /* If the lot is fat, give the boot to all the non-opening 
      * splits, and refill it */
Index: qofquerycore.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofquerycore.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -Lsrc/engine/qofquerycore.c -Lsrc/engine/qofquerycore.c -u -r1.14 -r1.15
--- src/engine/qofquerycore.c
+++ src/engine/qofquerycore.c
@@ -404,13 +404,15 @@
     break;
   }
 
+  /* Amounts are considered to be 'equal' if they match to 
+   * four decimal places. (epsilon=1/10000) */
   if (pd->how == QOF_COMPARE_EQUAL || pd->how == QOF_COMPARE_NEQ) {
     gnc_numeric cmp_val = gnc_numeric_create (1, 10000);
     compare =
       (gnc_numeric_compare (gnc_numeric_abs
                             (gnc_numeric_sub (gnc_numeric_abs (obj_val),
                                               gnc_numeric_abs (pdata->amount),
-                                              100000, GNC_RND_ROUND)),
+                                              100000, GNC_HOW_RND_ROUND)),
                             cmp_val) < 0);
   } else
     compare = gnc_numeric_compare (gnc_numeric_abs (obj_val), pdata->amount);


More information about the gnucash-changes mailing list