r19695 - gnucash/trunk/src - Bug #502853 - Incorrent tax rounding in invoice (rounding of .5)

Geert Janssens gjanssens at code.gnucash.org
Sat Oct 23 06:38:49 EDT 2010


Author: gjanssens
Date: 2010-10-23 06:38:48 -0400 (Sat, 23 Oct 2010)
New Revision: 19695
Trac: http://svn.gnucash.org/trac/changeset/19695

Modified:
   gnucash/trunk/src/app-utils/gnc-euro.c
   gnucash/trunk/src/app-utils/gnc-exp-parser.c
   gnucash/trunk/src/app-utils/gnc-sx-instance-model.c
   gnucash/trunk/src/app-utils/test/test-print-parse-amount.c
   gnucash/trunk/src/business/business-gnome/dialog-billterms.c
   gnucash/trunk/src/business/business-gnome/dialog-invoice.c
   gnucash/trunk/src/engine/Account.c
   gnucash/trunk/src/engine/Scrub.c
   gnucash/trunk/src/engine/Scrub2.c
   gnucash/trunk/src/engine/Split.c
   gnucash/trunk/src/engine/Transaction.c
   gnucash/trunk/src/engine/cap-gains.c
   gnucash/trunk/src/engine/engine-helpers.c
   gnucash/trunk/src/engine/gnc-pricedb.c
   gnucash/trunk/src/engine/gncBusGuile.c
   gnucash/trunk/src/engine/gncEntry.c
   gnucash/trunk/src/engine/gncInvoice.c
   gnucash/trunk/src/engine/test-core/test-engine-stuff.c
   gnucash/trunk/src/gnome-utils/dialog-transfer.c
   gnucash/trunk/src/gnome-utils/gnc-amount-edit.c
   gnucash/trunk/src/gnome-utils/window-main-summarybar.c
   gnucash/trunk/src/gnome/dialog-fincalc.c
   gnucash/trunk/src/gnome/druid-hierarchy.c
   gnucash/trunk/src/gnome/druid-loan.c
   gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
   gnucash/trunk/src/gnome/gnc-split-reg.c
   gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c
   gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c
   gnucash/trunk/src/import-export/csv/gnc-csv-model.c
   gnucash/trunk/src/import-export/hbci/gnc-hbci-getbalance.c
   gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c
   gnucash/trunk/src/import-export/hbci/gnc-hbci-transfer.c
   gnucash/trunk/src/import-export/ofx/gnc-ofx-import.c
   gnucash/trunk/src/libqof/qof/qofquerycore.c
   gnucash/trunk/src/register/ledger-core/split-register-model-save.c
   gnucash/trunk/src/register/ledger-core/split-register-model.c
   gnucash/trunk/src/register/ledger-core/split-register.c
   gnucash/trunk/src/register/register-core/pricecell.c
Log:
Bug #502853 - Incorrent tax rounding in invoice (rounding of .5)

This patch changes the default rounding behaviour in GnuCash from
"Round to nearest even" to "Round away to infinity". See the bugreport
for more details on these different rounding methods.

Modified: gnucash/trunk/src/app-utils/gnc-euro.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-euro.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/app-utils/gnc-euro.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -164,12 +164,11 @@
     {
         gnc_numeric rate;
 
-        rate = double_to_gnc_numeric (result->rate, 100000, GNC_HOW_RND_ROUND);
+        rate = double_to_gnc_numeric (result->rate, 100000, GNC_HOW_RND_ROUND_HALF_UP);
 
-        /* Which rounding should be used here? H. Thoma said
-           GNC_HOW_RND_FLOOR, but I (cstim) think he's wrong -- the official
-           rules say you *have* to use GNC_HOW_RND_ROUND! */
-        return gnc_numeric_div (value, rate, 100, GNC_HOW_RND_ROUND);
+        /* EC Regulation 1103/97 states we should use "Round half away from zero"
+         * See http://europa.eu/legislation_summaries/economic_and_monetary_affairs/institutional_and_economic_framework/l25025_en.htm */
+        return gnc_numeric_div (value, rate, 100, GNC_HOW_RND_ROUND_HALF_UP);
     }
 }
 
@@ -198,10 +197,12 @@
     {
         gnc_numeric rate;
 
-        rate = double_to_gnc_numeric (result->rate, 100000, GNC_HOW_RND_ROUND);
+        rate = double_to_gnc_numeric (result->rate, 100000, GNC_HOW_RND_ROUND_HALF_UP);
 
+        /* EC Regulation 1103/97 states we should use "Round half away from zero"
+         * See http://europa.eu/legislation_summaries/economic_and_monetary_affairs/institutional_and_economic_framework/l25025_en.htm */
         return gnc_numeric_mul (value, rate, gnc_commodity_get_fraction (currency),
-                                GNC_HOW_RND_ROUND);
+                                GNC_HOW_RND_ROUND_HALF_UP);
     }
 }
 
@@ -228,7 +229,7 @@
         return gnc_numeric_zero ();
 
     return double_to_gnc_numeric (result->rate, GNC_DENOM_AUTO,
-                                  GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND);
+                                  GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 /* ------------------------------------------------------ */

Modified: gnucash/trunk/src/app-utils/gnc-exp-parser.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-exp-parser.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/app-utils/gnc-exp-parser.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -393,7 +393,7 @@
     result = g_new0( gnc_numeric, 1 );
     *result = double_to_gnc_numeric( scm_num2dbl(scmTmp, G_STRFUNC),
                                      GNC_DENOM_AUTO,
-                                     GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND );
+                                     GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND_HALF_UP );
     /* FIXME: cleanup scmArgs = scm_list, cons'ed cells? */
     return (void*)result;
 }

Modified: gnucash/trunk/src/app-utils/gnc-sx-instance-model.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-sx-instance-model.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/app-utils/gnc-sx-instance-model.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1156,7 +1156,7 @@
                   {
                   exchange = gnc_numeric_div(gnc_numeric_create(1,1),
                   gnc_price_get_value(price),
-                  1000, GNC_HOW_RND_ROUND);
+                  1000, GNC_HOW_RND_ROUND_HALF_UP);
                   }
                   }
                   else
@@ -1177,7 +1177,7 @@
                 }
                 g_string_free(exchange_rate_var_name, TRUE);
 
-                amt = gnc_numeric_mul(final, exchange_rate, 1000, GNC_HOW_RND_ROUND);
+                amt = gnc_numeric_mul(final, exchange_rate, 1000, GNC_HOW_RND_ROUND_HALF_UP);
                 xaccSplitSetAmount(copying_split, amt);
             }
 
@@ -1612,7 +1612,7 @@
             /* Multiply with the count factor. */
             final = gnc_numeric_mul(final_once, creation_data->count,
                                     gnc_numeric_denom(final_once),
-                                    GNC_HOW_RND_ROUND);
+                                    GNC_HOW_RND_ROUND_HALF_UP);
 
             gncn_error = gnc_numeric_check(final);
             if (gncn_error != GNC_ERROR_OK)

Modified: gnucash/trunk/src/app-utils/test/test-print-parse-amount.c
===================================================================
--- gnucash/trunk/src/app-utils/test/test-print-parse-amount.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/app-utils/test/test-print-parse-amount.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -55,7 +55,7 @@
         print_info.force_fit = 0;
         print_info.round = 0;
 
-        n1 = gnc_numeric_convert (n, fraction, GNC_HOW_RND_ROUND);
+        n1 = gnc_numeric_convert (n, fraction, GNC_HOW_RND_ROUND_HALF_UP);
         if (gnc_numeric_check(n1))
         {
             do_test_args((gnc_numeric_check(n1) == GNC_ERROR_OVERFLOW),
@@ -108,11 +108,11 @@
         IS_VALID_NUM(n, n);
         test_num (n);
 
-        n1 = gnc_numeric_mul (n, n, n.denom, GNC_HOW_RND_ROUND);
+        n1 = gnc_numeric_mul (n, n, n.denom, GNC_HOW_RND_ROUND_HALF_UP);
         IS_VALID_NUM(n1, n);
         test_num (n);
 
-        n1 = gnc_numeric_mul (n, n, n.denom, GNC_HOW_RND_ROUND);
+        n1 = gnc_numeric_mul (n, n, n.denom, GNC_HOW_RND_ROUND_HALF_UP);
         IS_VALID_NUM(n1, n);
         test_num (n);
     }

Modified: gnucash/trunk/src/business/business-gnome/dialog-billterms.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/dialog-billterms.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/business/business-gnome/dialog-billterms.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -160,7 +160,7 @@
     gdouble fl = 0.0;
 
     fl = gtk_spin_button_get_value (GTK_SPIN_BUTTON (widget));
-    val = double_to_gnc_numeric (fl, 100000, GNC_HOW_RND_ROUND);
+    val = double_to_gnc_numeric (fl, 100000, GNC_HOW_RND_ROUND_HALF_UP);
     func (term, val);
 }
 

Modified: gnucash/trunk/src/business/business-gnome/dialog-invoice.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/dialog-invoice.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/business/business-gnome/dialog-invoice.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1344,7 +1344,7 @@
 {
     char string[256];
 
-    amt = gnc_numeric_convert (amt, gnc_commodity_get_fraction(com), GNC_HOW_RND_ROUND);
+    amt = gnc_numeric_convert (amt, gnc_commodity_get_fraction(com), GNC_HOW_RND_ROUND_HALF_UP);
     xaccSPrintAmount (string, amt, gnc_default_print_info (TRUE));
     gtk_label_set_text (label, string);
 }
@@ -1399,7 +1399,7 @@
     {
         amount = gncInvoiceGetTotalOf (invoice, GNC_PAYMENT_CASH);
         amount = gnc_numeric_sub (amount, to_charge_amt,
-                                  gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND);
+                                  gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND_HALF_UP);
         gnc_invoice_reset_total_label (GTK_LABEL (iw->total_cash_label), amount, currency);
     }
 
@@ -1407,7 +1407,7 @@
     {
         amount = gncInvoiceGetTotalOf (invoice, GNC_PAYMENT_CARD);
         amount = gnc_numeric_add (amount, to_charge_amt,
-                                  gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND);
+                                  gnc_commodity_get_fraction (currency), GNC_HOW_RND_ROUND_HALF_UP);
         gnc_invoice_reset_total_label (GTK_LABEL (iw->total_charge_label), amount, currency);
     }
 }

Modified: gnucash/trunk/src/engine/Account.c
===================================================================
--- gnucash/trunk/src/engine/Account.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/Account.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -3374,7 +3374,7 @@
     balance = xaccAccountGetXxxBalanceInCurrency (acc, cb->fn, cb->currency);
     cb->balance = gnc_numeric_add (cb->balance, balance,
                                    gnc_commodity_get_fraction (cb->currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 static void
@@ -3389,7 +3389,7 @@
                   acc, cb->date, cb->asOfDateFn, cb->currency);
     cb->balance = gnc_numeric_add (cb->balance, balance,
                                    gnc_commodity_get_fraction (cb->currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 

Modified: gnucash/trunk/src/engine/Scrub.c
===================================================================
--- gnucash/trunk/src/engine/Scrub.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/Scrub.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -244,7 +244,7 @@
     scu = MIN (xaccAccountGetCommoditySCU (account),
                gnc_commodity_get_fraction (currency));
 
-    if (gnc_numeric_same (amount, value, scu, GNC_HOW_RND_ROUND))
+    if (gnc_numeric_same (amount, value, scu, GNC_HOW_RND_ROUND_HALF_UP))
     {
         LEAVE("(split=%p) different values", split);
         return;
@@ -566,7 +566,7 @@
       * of the denominators might already be reduced.  */
     new_value = gnc_numeric_sub (old_value, imbalance,
                                  gnc_commodity_get_fraction(currency),
-                                 GNC_HOW_RND_ROUND);
+                                 GNC_HOW_RND_ROUND_HALF_UP);
 
     xaccSplitSetValue (balance_split, new_value);
 
@@ -669,7 +669,7 @@
                 new_value = gnc_numeric_div (xaccSplitGetAmount(balance_split),
                                              convrate,
                                              gnc_commodity_get_fraction(currency),
-                                             GNC_HOW_RND_ROUND);
+                                             GNC_HOW_RND_ROUND_HALF_UP);
                 if (! gnc_numeric_equal (old_value, new_value))
                 {
                     xaccTransBeginEdit (trans);
@@ -740,7 +740,7 @@
             old_amount = xaccSplitGetAmount (balance_split);
             new_amount = gnc_numeric_sub (old_amount, gnc_monetary_value(*imbal_mon),
                                           gnc_commodity_get_fraction(commodity),
-                                          GNC_HOW_RND_ROUND);
+                                          GNC_HOW_RND_ROUND_HALF_UP);
 
             xaccSplitSetAmount (balance_split, new_amount);
 
@@ -755,7 +755,7 @@
                 old_value = xaccSplitGetValue (balance_split);
                 new_value = gnc_numeric_sub (old_value, val_imbalance,
                                              gnc_commodity_get_fraction(currency),
-                                             GNC_HOW_RND_ROUND);
+                                             GNC_HOW_RND_ROUND_HALF_UP);
 
                 xaccSplitSetValue (balance_split, new_value);
             }
@@ -806,7 +806,7 @@
                     old_value = xaccSplitGetValue (balance_split);
                     new_value = gnc_numeric_sub (old_value, xaccSplitGetValue(split),
                                                  gnc_commodity_get_fraction(currency),
-                                                 GNC_HOW_RND_ROUND);
+                                                 GNC_HOW_RND_ROUND_HALF_UP);
                     xaccSplitSetValue (balance_split, new_value);
 
                     /* Don't change the balance split's amount since the amount

Modified: gnucash/trunk/src/engine/Scrub2.c
===================================================================
--- gnucash/trunk/src/engine/Scrub2.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/Scrub2.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -273,7 +273,7 @@
         frac = gnc_numeric_div (dst_amt, src_amt,
                                 GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
         target_val = gnc_numeric_mul (frac, src_val,
-                                      scu, GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND);
+                                      scu, GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND_HALF_UP);
         if (gnc_numeric_check (target_val))
         {
             PERR ("Numeric overflow of value\n"

Modified: gnucash/trunk/src/engine/Split.c
===================================================================
--- gnucash/trunk/src/engine/Split.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/Split.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -937,9 +937,9 @@
     xaccTransBeginEdit (s->parent);
 
     s->amount = double_to_gnc_numeric(amt, get_commodity_denom(s),
-                                      GNC_HOW_RND_ROUND);
+                                      GNC_HOW_RND_ROUND_HALF_UP);
     s->value  = double_to_gnc_numeric(price * amt, get_currency_denom(s),
-                                      GNC_HOW_RND_ROUND);
+                                      GNC_HOW_RND_ROUND_HALF_UP);
 
     SET_GAINS_A_VDIRTY(s);
     mark_split (s);
@@ -956,9 +956,9 @@
     xaccTransBeginEdit (s->parent);
 
     s->amount = gnc_numeric_convert(amt, get_commodity_denom(s),
-                                    GNC_HOW_RND_ROUND);
+                                    GNC_HOW_RND_ROUND_HALF_UP);
     s->value  = gnc_numeric_mul(s->amount, price,
-                                get_currency_denom(s), GNC_HOW_RND_ROUND);
+                                get_currency_denom(s), GNC_HOW_RND_ROUND_HALF_UP);
 
     SET_GAINS_A_VDIRTY(s);
     mark_split (s);
@@ -973,7 +973,7 @@
     g_return_if_fail(split);
     split->value = gnc_numeric_mul(xaccSplitGetAmount(split),
                                    price, get_currency_denom(split),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 void
@@ -985,7 +985,7 @@
 
     s->value = gnc_numeric_mul(xaccSplitGetAmount(s),
                                price, get_currency_denom(s),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     SET_GAINS_VDIRTY(s);
     mark_split (s);
@@ -1000,7 +1000,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_HOW_RND_ROUND);
+                                            GNC_HOW_RND_ROUND_HALF_UP);
     if (!s) return;
     ENTER (" ");
     xaccTransBeginEdit (s->parent);
@@ -1020,7 +1020,7 @@
     s->amount = gnc_numeric_convert(amt, commodity_denom,
                                     GNC_HOW_RND_NEVER);
     s->value  = gnc_numeric_mul(s->amount, old_price,
-                                get_currency_denom(s), GNC_HOW_RND_ROUND);
+                                get_currency_denom(s), GNC_HOW_RND_ROUND_HALF_UP);
 
     SET_GAINS_A_VDIRTY(s);
     mark_split (s);
@@ -1036,7 +1036,7 @@
     if (split->acc)
     {
         split->amount = gnc_numeric_convert(amt,
-                                            get_commodity_denom(split), GNC_HOW_RND_ROUND);
+                                            get_commodity_denom(split), GNC_HOW_RND_ROUND_HALF_UP);
     }
     else
     {
@@ -1057,7 +1057,7 @@
     xaccTransBeginEdit (s->parent);
     if (s->acc)
         s->amount = gnc_numeric_convert(amt, get_commodity_denom(s),
-                                        GNC_HOW_RND_ROUND);
+                                        GNC_HOW_RND_ROUND_HALF_UP);
     else
         s->amount = amt;
 
@@ -1073,7 +1073,7 @@
 {
     g_return_if_fail(split);
     split->value = gnc_numeric_convert(amt,
-                                       get_currency_denom(split), GNC_HOW_RND_ROUND);
+                                       get_currency_denom(split), GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 /* The value of the split in the _transaction's_ currency. */
@@ -1090,7 +1090,7 @@
 
     xaccTransBeginEdit (s->parent);
     new_val = gnc_numeric_convert(amt, get_currency_denom(s),
-                                  GNC_HOW_RND_ROUND);
+                                  GNC_HOW_RND_ROUND_HALF_UP);
     if (gnc_numeric_check(new_val) == GNC_ERROR_OK)
         s->value = new_val;
     else PERR("numeric error in converting the split value's denominator");
@@ -1151,16 +1151,16 @@
         {
             s->amount = gnc_numeric_convert(value,
                                             get_commodity_denom(s),
-                                            GNC_HOW_RND_ROUND);
+                                            GNC_HOW_RND_ROUND_HALF_UP);
         }
         s->value = gnc_numeric_convert(value,
                                        get_currency_denom(s),
-                                       GNC_HOW_RND_ROUND);
+                                       GNC_HOW_RND_ROUND_HALF_UP);
     }
     else if (gnc_commodity_equiv(commodity, base_currency))
     {
         s->amount = gnc_numeric_convert(value, get_commodity_denom(s),
-                                        GNC_HOW_RND_ROUND);
+                                        GNC_HOW_RND_ROUND_HALF_UP);
     }
     else
     {
@@ -1257,7 +1257,7 @@
      * doesn't mean the denominators are the same! */
     value = gnc_numeric_convert(value,
                                 gnc_commodity_get_fraction (base_currency),
-                                GNC_HOW_RND_ROUND);
+                                GNC_HOW_RND_ROUND_HALF_UP);
 
     LEAVE (" total=%" G_GINT64_FORMAT "/%" G_GINT64_FORMAT,
            value.num, value.denom);
@@ -1329,7 +1329,7 @@
     convrate = xaccTransGetAccountConvRate(txn, account);
     return gnc_numeric_mul (value, convrate,
                             gnc_commodity_get_fraction (to_commodity),
-                            GNC_HOW_RND_ROUND);
+                            GNC_HOW_RND_ROUND_HALF_UP);
 }
 
 /********************************************************************\
@@ -1847,7 +1847,7 @@
     price = gnc_numeric_div(val, amt,
                             GNC_DENOM_AUTO,
                             GNC_HOW_DENOM_SIGFIGS(PRICE_SIGFIGS) |
-                            GNC_HOW_RND_ROUND);
+                            GNC_HOW_RND_ROUND_HALF_UP);
 
     /* During random checks we can get some very weird prices.  Let's
      * handle some overflow and other error conditions by returning

Modified: gnucash/trunk/src/engine/Transaction.c
===================================================================
--- gnucash/trunk/src/engine/Transaction.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/Transaction.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -975,7 +975,7 @@
     if (!trans || !acc) return total;
 
     total = gnc_numeric_convert (total, xaccAccountGetCommoditySCU (acc),
-                                 GNC_HOW_RND_ROUND);
+                                 GNC_HOW_RND_ROUND_HALF_UP);
     FOR_EACH_SPLIT(trans, if (acc == xaccSplitGetAccount(s))
                    total = gnc_numeric_add_fixed(
                                total, xaccSplitGetAmount(s)));

Modified: gnucash/trunk/src/engine/cap-gains.c
===================================================================
--- gnucash/trunk/src/engine/cap-gains.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/cap-gains.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -494,7 +494,7 @@
                                 GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
         val_a = gnc_numeric_mul (frac, val_tot,
                                  gnc_numeric_denom(val_tot),
-                                 GNC_HOW_RND_ROUND | GNC_HOW_DENOM_EXACT);
+                                 GNC_HOW_RND_ROUND_HALF_UP | GNC_HOW_DENOM_EXACT);
 
         val_b = gnc_numeric_sub_fixed (val_tot, val_a);
         if (gnc_numeric_check(val_a))
@@ -876,7 +876,7 @@
     /* Basis for this split: */
     value = gnc_numeric_mul (frac, lot_value,
                              gnc_numeric_denom(opening_value),
-                             GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND);
+                             GNC_HOW_DENOM_EXACT | GNC_HOW_RND_ROUND_HALF_UP);
     /* Capital gain for this split: */
     value = gnc_numeric_sub (value, split->value,
                              GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);

Modified: gnucash/trunk/src/engine/engine-helpers.c
===================================================================
--- gnucash/trunk/src/engine/engine-helpers.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/engine-helpers.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1259,7 +1259,7 @@
             amount = scm_num2dbl (scm, G_STRFUNC);
 
             val = double_to_gnc_numeric (amount, GNC_DENOM_AUTO,
-                                         GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND);
+                                         GNC_HOW_DENOM_SIGFIGS(6) | GNC_HOW_RND_ROUND_HALF_UP);
 
             if (!safe_strcmp (pr_type, "pr-price"))
             {

Modified: gnucash/trunk/src/engine/gnc-pricedb.c
===================================================================
--- gnucash/trunk/src/engine/gnc-pricedb.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/gnc-pricedb.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -2170,7 +2170,7 @@
     {
         balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2183,7 +2183,7 @@
     {
         balance = gnc_numeric_div (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2239,7 +2239,7 @@
                                GNC_HOW_DENOM_EXACT | GNC_HOW_RND_NEVER);
     balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     gnc_price_list_destroy(price_list);
     return balance;
@@ -2267,7 +2267,7 @@
     {
         balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2280,7 +2280,7 @@
     {
         balance = gnc_numeric_div (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2321,7 +2321,7 @@
                 currency_price_value = gnc_numeric_div(gnc_numeric_create(1, 1),
                                                        gnc_price_get_value(currency_price),
                                                        gnc_commodity_get_fraction (new_currency),
-                                                       GNC_HOW_RND_ROUND);
+                                                       GNC_HOW_RND_ROUND_HALF_UP);
                 gnc_price_unref(currency_price);
             }
         }
@@ -2333,11 +2333,11 @@
 
     balance = gnc_numeric_mul (balance, currency_price_value,
                                gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     gnc_price_list_destroy(price_list);
     return balance;
@@ -2367,7 +2367,7 @@
     {
         balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2380,7 +2380,7 @@
     {
         balance = gnc_numeric_div (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
         gnc_price_unref (price);
         return balance;
     }
@@ -2421,7 +2421,7 @@
                 currency_price_value = gnc_numeric_div(gnc_numeric_create(1, 1),
                                                        gnc_price_get_value(currency_price),
                                                        gnc_commodity_get_fraction (new_currency),
-                                                       GNC_HOW_RND_ROUND);
+                                                       GNC_HOW_RND_ROUND_HALF_UP);
                 gnc_price_unref(currency_price);
             }
         }
@@ -2433,10 +2433,10 @@
 
     balance = gnc_numeric_mul (balance, currency_price_value,
                                gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
     balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     gnc_price_list_destroy(price_list);
     return balance;

Modified: gnucash/trunk/src/engine/gncBusGuile.c
===================================================================
--- gnucash/trunk/src/engine/gncBusGuile.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/gncBusGuile.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -85,7 +85,7 @@
 
     com = xaccAccountGetCommodity (av->account);
     val = gnc_numeric_convert (av->value, gnc_commodity_get_fraction (com),
-                               GNC_HOW_RND_ROUND);
+                               GNC_HOW_RND_ROUND_HALF_UP);
 
     return scm_cons (SWIG_NewPointerObj(av->account, account_type, 0),
                      gnc_numeric_to_scm (val));

Modified: gnucash/trunk/src/engine/gncEntry.c
===================================================================
--- gnucash/trunk/src/engine/gncEntry.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/gncEntry.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1173,13 +1173,13 @@
 
     if (discount_value != NULL)
     {
-        if (SCU) discount = gnc_numeric_convert(discount, SCU, GNC_HOW_RND_ROUND);
+        if (SCU) discount = gnc_numeric_convert(discount, SCU, GNC_HOW_RND_ROUND_HALF_UP);
         *discount_value = discount;
     }
 
     if (value != NULL)
     {
-        if (SCU) result = gnc_numeric_convert(result, SCU, GNC_HOW_RND_ROUND);
+        if (SCU) result = gnc_numeric_convert(result, SCU, GNC_HOW_RND_ROUND_HALF_UP);
         *value = result;
     }
 
@@ -1200,14 +1200,14 @@
             switch (gncTaxTableEntryGetType (entry))
             {
             case GNC_AMT_TYPE_VALUE:
-                if (SCU) amount = gnc_numeric_convert(amount, SCU, GNC_HOW_RND_ROUND);
+                if (SCU) amount = gnc_numeric_convert(amount, SCU, GNC_HOW_RND_ROUND_HALF_UP);
                 taxes = gncAccountValueAdd (taxes, acc, amount);
                 break;
             case GNC_AMT_TYPE_PERCENT:
                 amount = gnc_numeric_div (amount, percent, GNC_DENOM_AUTO,
                                           GNC_HOW_DENOM_LCD);
                 tax = gnc_numeric_mul (pretax, amount, GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD);
-                if (SCU) tax = gnc_numeric_convert(tax, SCU, GNC_HOW_RND_ROUND);
+                if (SCU) tax = gnc_numeric_convert(tax, SCU, GNC_HOW_RND_ROUND_HALF_UP);
                 taxes = gncAccountValueAdd (taxes, acc, tax);
                 break;
             default:
@@ -1303,18 +1303,18 @@
                           &(entry->b_value), NULL, &(entry->b_tax_values));
 
     entry->i_value_rounded = gnc_numeric_convert (entry->i_value, denom,
-                             GNC_HOW_RND_ROUND);
+                             GNC_HOW_RND_ROUND_HALF_UP);
     entry->i_disc_value_rounded = gnc_numeric_convert (entry->i_disc_value, denom,
-                                  GNC_HOW_RND_ROUND);
+                                  GNC_HOW_RND_ROUND_HALF_UP);
     entry->i_tax_value = gncAccountValueTotal (entry->i_tax_values);
     entry->i_tax_value_rounded = gnc_numeric_convert (entry->i_tax_value, denom,
-                                 GNC_HOW_RND_ROUND);
+                                 GNC_HOW_RND_ROUND_HALF_UP);
 
     entry->b_value_rounded = gnc_numeric_convert (entry->b_value, denom,
-                             GNC_HOW_RND_ROUND);
+                             GNC_HOW_RND_ROUND_HALF_UP);
     entry->b_tax_value = gncAccountValueTotal (entry->b_tax_values);
     entry->b_tax_value_rounded = gnc_numeric_convert (entry->b_tax_value, denom,
-                                 GNC_HOW_RND_ROUND);
+                                 GNC_HOW_RND_ROUND_HALF_UP);
     entry->values_dirty = FALSE;
 }
 

Modified: gnucash/trunk/src/engine/gncInvoice.c
===================================================================
--- gnucash/trunk/src/engine/gncInvoice.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/gncInvoice.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1297,7 +1297,7 @@
                         {
                             gnc_numeric converted_amount;
                             xaccSplitSetValue(split, (reverse ? gnc_numeric_neg(value) : value));
-                            converted_amount = gnc_numeric_div(value, gnc_price_get_value(price), GNC_DENOM_AUTO, GNC_HOW_RND_ROUND);
+                            converted_amount = gnc_numeric_div(value, gnc_price_get_value(price), GNC_DENOM_AUTO, GNC_HOW_RND_ROUND_HALF_UP);
                             printf("converting from %f to %f\n", gnc_numeric_to_double(value), gnc_numeric_to_double(converted_amount));
                             xaccSplitSetAmount(split, reverse ? gnc_numeric_neg(converted_amount) : converted_amount);
                         }
@@ -1388,7 +1388,7 @@
             {
                 gnc_numeric converted_amount;
                 xaccSplitSetValue(split, (reverse ? gnc_numeric_neg(acc_val->value) : acc_val->value));
-                converted_amount = gnc_numeric_div(acc_val->value, gnc_price_get_value(price), GNC_DENOM_AUTO, GNC_HOW_RND_ROUND);
+                converted_amount = gnc_numeric_div(acc_val->value, gnc_price_get_value(price), GNC_DENOM_AUTO, GNC_HOW_RND_ROUND_HALF_UP);
                 printf("converting from %f to %f\n", gnc_numeric_to_double(acc_val->value), gnc_numeric_to_double(converted_amount));
 
                 xaccSplitSetAmount(split, reverse ? gnc_numeric_neg(converted_amount) : converted_amount);
@@ -1687,7 +1687,7 @@
     {
         /* Need to value the payment in terms of the owner commodity */
         xaccSplitSetAmount(split, reverse ? amount : gnc_numeric_neg (amount));
-        payment_value = gnc_numeric_mul(amount, exch, GNC_DENOM_AUTO, GNC_HOW_RND_ROUND);
+        payment_value = gnc_numeric_mul(amount, exch, GNC_DENOM_AUTO, GNC_HOW_RND_ROUND_HALF_UP);
         xaccSplitSetValue(split, reverse ? payment_value : gnc_numeric_neg(payment_value));
     }
 

Modified: gnucash/trunk/src/engine/test-core/test-engine-stuff.c
===================================================================
--- gnucash/trunk/src/engine/test-core/test-engine-stuff.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/engine/test-core/test-engine-stuff.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1335,7 +1335,7 @@
             rate = gnc_numeric_abs(get_random_gnc_numeric());
             amt = gnc_numeric_mul(val, rate,
                                   GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE);
-            amt = gnc_numeric_convert(amt, denom, GNC_HOW_RND_ROUND);
+            amt = gnc_numeric_convert(amt, denom, GNC_HOW_RND_ROUND_HALF_UP);
         }
         while (gnc_numeric_check(amt) != GNC_ERROR_OK);
     }

Modified: gnucash/trunk/src/gnome/dialog-fincalc.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-fincalc.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome/dialog-fincalc.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -151,12 +151,12 @@
     gnc_amount_edit_set_damount (GNC_AMOUNT_EDIT(fcd->amounts[FUTURE_VALUE]),
                                  -fcd->financial_info.fv);
 
-    pmt = double_to_gnc_numeric (fcd->financial_info.pmt, 100000, GNC_HOW_RND_ROUND);
+    pmt = double_to_gnc_numeric (fcd->financial_info.pmt, 100000, GNC_HOW_RND_ROUND_HALF_UP);
 
     commodity = gnc_default_currency ();
 
     total = gnc_numeric_mul (npp, pmt, gnc_commodity_get_fraction (commodity),
-                             GNC_HOW_RND_ROUND);
+                             GNC_HOW_RND_ROUND_HALF_UP);
 
     xaccSPrintAmount (string, total, gnc_default_print_info (FALSE));
     gtk_label_set_text (GTK_LABEL(fcd->payment_total_label), string);

Modified: gnucash/trunk/src/gnome/druid-hierarchy.c
===================================================================
--- gnucash/trunk/src/gnome/druid-hierarchy.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome/druid-hierarchy.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -779,7 +779,7 @@
      */
     {
         int account_cmdty_fraction = xaccAccountGetCommoditySCU(account);
-        amount = gnc_numeric_convert(amount, account_cmdty_fraction, GNC_HOW_RND_ROUND);
+        amount = gnc_numeric_convert(amount, account_cmdty_fraction, GNC_HOW_RND_ROUND_HALF_UP);
     }
     set_final_balance (data->balance_hash, account, amount);
     qof_event_gen (QOF_INSTANCE(account), QOF_EVENT_MODIFY, NULL);

Modified: gnucash/trunk/src/gnome/druid-loan.c
===================================================================
--- gnucash/trunk/src/gnome/druid-loan.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome/druid-loan.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -2152,7 +2152,7 @@
     GNCPrintAmountInfo pricePAI = gnc_default_price_print_info();
 #define AMTBUF_LEN 64
     gchar amtBuf[AMTBUF_LEN];
-    gint GNCN_HOW = (GNC_HOW_DENOM_SIGFIGS(2) | GNC_HOW_RND_ROUND);
+    gint GNCN_HOW = (GNC_HOW_DENOM_SIGFIGS(2) | GNC_HOW_RND_ROUND_HALF_UP);
 
     /* We're going to use this a lot, below, so just create it once. */
     xaccSPrintAmount( amtBuf,
@@ -2803,7 +2803,7 @@
                 PERR( "pmt Parsing error at %s", eloc );
                 continue;
             }
-            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND );
+            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND_HALF_UP );
             rowNumData[0] = val;
 
             if ( ! gnc_exp_parser_parse_separate_vars(
@@ -2812,7 +2812,7 @@
                 PERR( "ppmt Parsing error at %s", eloc );
                 continue;
             }
-            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND );
+            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND_HALF_UP );
             rowNumData[1] = val;
 
             if ( ! gnc_exp_parser_parse_separate_vars(
@@ -2821,7 +2821,7 @@
                 PERR( "ipmt Parsing error at %s", eloc );
                 continue;
             }
-            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND );
+            val = gnc_numeric_convert( val, 100, GNC_HOW_RND_ROUND_HALF_UP );
             rowNumData[2] = val;
         }
 
@@ -2861,7 +2861,7 @@
             {
                 gint gncn_how =
                     GNC_HOW_DENOM_SIGFIGS(2)
-                    | GNC_HOW_RND_ROUND;
+                    | GNC_HOW_RND_ROUND_HALF_UP;
                 gnc_numeric val;
                 rowNumData = (gnc_numeric*)g_hash_table_lookup( repayment_schedule,
                              &curDate );

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -916,7 +916,7 @@
 
 
             num = gnc_numeric_convert(num, GNC_DENOM_AUTO,
-                                      GNC_HOW_DENOM_SIGFIGS(priv->sigFigs) | GNC_HOW_RND_ROUND);
+                                      GNC_HOW_DENOM_SIGFIGS(priv->sigFigs) | GNC_HOW_RND_ROUND_HALF_UP);
             gnc_budget_set_account_period_value(
                 priv->budget, acct, i, num);
         }

Modified: gnucash/trunk/src/gnome/gnc-split-reg.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-split-reg.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome/gnc-split-reg.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -670,7 +670,7 @@
 
             amount = gnc_numeric_mul (amount, gnc_price_get_value (price),
                                       gnc_commodity_get_fraction (currency),
-                                      GNC_HOW_RND_ROUND);
+                                      GNC_HOW_RND_ROUND_HALF_UP);
 
             xaccSPrintAmount (string, amount, print_info);
 

Modified: gnucash/trunk/src/gnome-utils/dialog-transfer.c
===================================================================
--- gnucash/trunk/src/gnome-utils/dialog-transfer.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome-utils/dialog-transfer.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -901,7 +901,7 @@
         to_amount = gnc_numeric_zero();
     else
         to_amount = gnc_numeric_mul(gnc_amount_edit_get_amount(amount_edit),
-                                    price, scu, GNC_HOW_RND_ROUND);
+                                    price, scu, GNC_HOW_RND_ROUND_HALF_UP);
 
     /* Update the dialog. */
     gnc_amount_edit_set_amount(to_amount_edit, to_amount);
@@ -950,7 +950,7 @@
     gnc_amount_edit_evaluate (GNC_AMOUNT_EDIT (xferData->to_amount_edit));
 
     price = gnc_xfer_dialog_compute_price(xferData);
-    price = gnc_numeric_convert (price, PRECISION, GNC_HOW_RND_ROUND);
+    price = gnc_numeric_convert (price, PRECISION, GNC_HOW_RND_ROUND_HALF_UP);
     gnc_amount_edit_set_amount(GNC_AMOUNT_EDIT(xferData->price_edit), price);
     gnc_xfer_dialog_update_conv_info(xferData);
 

Modified: gnucash/trunk/src/gnome-utils/gnc-amount-edit.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-amount-edit.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome-utils/gnc-amount-edit.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -251,7 +251,7 @@
         gnc_numeric old_amount = gae->amount;
 
         if (gae->fraction > 0)
-            amount = gnc_numeric_convert (amount, gae->fraction, GNC_HOW_RND_ROUND);
+            amount = gnc_numeric_convert (amount, gae->fraction, GNC_HOW_RND_ROUND_HALF_UP);
 
         gnc_amount_edit_set_amount (gae, amount);
 
@@ -354,7 +354,7 @@
     else
         fraction = 100000;
 
-    amount = double_to_gnc_numeric (damount, fraction, GNC_HOW_RND_ROUND);
+    amount = double_to_gnc_numeric (damount, fraction, GNC_HOW_RND_ROUND_HALF_UP);
 
     gnc_amount_edit_set_amount (gae, amount);
 }

Modified: gnucash/trunk/src/gnome-utils/window-main-summarybar.c
===================================================================
--- gnucash/trunk/src/gnome-utils/window-main-summarybar.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/gnome-utils/window-main-summarybar.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -206,7 +206,7 @@
                 currency_accum->assets =
                     gnc_numeric_add (currency_accum->assets, end_amount,
                                      gnc_commodity_get_fraction (account_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (non_currency)
@@ -214,7 +214,7 @@
                 non_curr_accum->assets =
                     gnc_numeric_add (non_curr_accum->assets, end_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (options.grand_total)
@@ -222,7 +222,7 @@
                 grand_total_accum->assets =
                     gnc_numeric_add (grand_total_accum->assets, end_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (options.euro && (currency_accum != euro_accum))
@@ -231,7 +231,7 @@
                     gnc_numeric_add (euro_accum->assets,
                                      gnc_convert_to_euro(account_currency, end_amount),
                                      gnc_commodity_get_fraction (euro_commodity),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             gnc_ui_accounts_recurse(account, currency_list, options);
@@ -256,11 +256,11 @@
                 currency_accum->profits =
                     gnc_numeric_add (currency_accum->profits, start_amount,
                                      gnc_commodity_get_fraction (account_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
                 currency_accum->profits =
                     gnc_numeric_sub (currency_accum->profits, end_amount,
                                      gnc_commodity_get_fraction (account_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (non_currency)
@@ -268,11 +268,11 @@
                 non_curr_accum->profits =
                     gnc_numeric_add (non_curr_accum->profits, start_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
                 non_curr_accum->profits =
                     gnc_numeric_sub (non_curr_accum->profits, end_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (options.grand_total)
@@ -281,12 +281,12 @@
                     gnc_numeric_add (grand_total_accum->profits,
                                      start_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
                 grand_total_accum->profits =
                     gnc_numeric_sub (grand_total_accum->profits,
                                      end_amount_default_currency,
                                      gnc_commodity_get_fraction (options.default_currency),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             if (options.euro && (currency_accum != euro_accum))
@@ -295,12 +295,12 @@
                     gnc_numeric_add (euro_accum->profits,
                                      gnc_convert_to_euro(account_currency, start_amount),
                                      gnc_commodity_get_fraction (euro_commodity),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
                 euro_accum->profits =
                     gnc_numeric_sub (euro_accum->profits,
                                      gnc_convert_to_euro(account_currency, end_amount),
                                      gnc_commodity_get_fraction (euro_commodity),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             }
 
             gnc_ui_accounts_recurse(account, currency_list, options);

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-ab-transfer.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -223,7 +223,7 @@
         amount = double_to_gnc_numeric(
                      AB_Value_GetValueAsDouble(AB_Transaction_GetValue(ab_trans)),
                      xaccAccountGetCommoditySCU(gnc_acc),
-                     GNC_HOW_RND_ROUND);
+                     GNC_HOW_RND_ROUND_HALF_UP);
         gnc_xfer_dialog_set_amount(xfer_dialog, amount);
 
         description = gnc_ab_description_to_gnc(ab_trans);

Modified: gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/aqbanking/gnc-ab-utils.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -520,7 +520,7 @@
         gnc_amount = double_to_gnc_numeric(
                          d_value,
                          xaccAccountGetCommoditySCU(gnc_acc),
-                         GNC_HOW_RND_ROUND);
+                         GNC_HOW_RND_ROUND_HALF_UP);
         if (!ab_value)
             g_warning("transaction_cb: Oops, value was NULL.  Using 0");
         xaccSplitSetBaseValue(split, gnc_amount, xaccAccountGetCommodity(gnc_acc));
@@ -815,7 +815,7 @@
 
     value = double_to_gnc_numeric(booked_value,
                                   xaccAccountGetCommoditySCU(gnc_acc),
-                                  GNC_HOW_RND_ROUND);
+                                  GNC_HOW_RND_ROUND_HALF_UP);
     if (noted_value == 0.0 && booked_value == 0.0)
     {
         dialog = gtk_message_dialog_new(

Modified: gnucash/trunk/src/import-export/csv/gnc-csv-model.c
===================================================================
--- gnucash/trunk/src/import-export/csv/gnc-csv-model.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/csv/gnc-csv-model.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -690,7 +690,7 @@
             prop->value = g_new(gnc_numeric, 1);
             *((gnc_numeric*)(prop->value)) =
             double_to_gnc_numeric(value, xaccAccountGetCommoditySCU(prop->list->account),
-            GNC_HOW_RND_ROUND);
+            GNC_HOW_RND_ROUND_HALF_UP);
         }
         return TRUE;
     }
@@ -859,7 +859,7 @@
     QofBook* book = gnc_account_get_book(list->account);
     gnc_commodity* currency = xaccAccountGetCommodity(list->account);
     gnc_numeric amount = double_to_gnc_numeric(0.0, xaccAccountGetCommoditySCU(list->account),
-                         GNC_HOW_RND_ROUND);
+                         GNC_HOW_RND_ROUND_HALF_UP);
 
     /* This flag is set to TRUE if we can use the "Deposit" or "Withdrawal" column. */
     gboolean amount_set = FALSE;
@@ -909,7 +909,7 @@
                 amount = gnc_numeric_add(*((gnc_numeric*)(prop->value)),
                                          amount,
                                          xaccAccountGetCommoditySCU(list->account),
-                                         GNC_HOW_RND_ROUND);
+                                         GNC_HOW_RND_ROUND_HALF_UP);
                 amount_set = TRUE;
                 /* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
                 trans_line->balance_set = FALSE;
@@ -922,7 +922,7 @@
                 amount = gnc_numeric_add(gnc_numeric_neg(*((gnc_numeric*)(prop->value))),
                                          amount,
                                          xaccAccountGetCommoditySCU(list->account),
-                                         GNC_HOW_RND_ROUND);
+                                         GNC_HOW_RND_ROUND_HALF_UP);
                 amount_set = TRUE;
                 /* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
                 trans_line->balance_set = FALSE;
@@ -1154,7 +1154,7 @@
          * any given transaction. */
         gnc_numeric balance_offset = double_to_gnc_numeric(0.0,
                                      xaccAccountGetCommoditySCU(account),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
         while (transactions != NULL)
         {
             GncCsvTransLine* trans_line = (GncCsvTransLine*)transactions->data;
@@ -1165,13 +1165,13 @@
                 gnc_numeric existing_balance = gnc_numeric_add(balance_offset,
                                                xaccAccountGetBalanceAsOfDate(account, date),
                                                xaccAccountGetCommoditySCU(account),
-                                               GNC_HOW_RND_ROUND);
+                                               GNC_HOW_RND_ROUND_HALF_UP);
 
                 /* The amount of the transaction is the difference between the new and existing balance. */
                 gnc_numeric amount = gnc_numeric_sub(trans_line->balance,
                                                      existing_balance,
                                                      xaccAccountGetCommoditySCU(account),
-                                                     GNC_HOW_RND_ROUND);
+                                                     GNC_HOW_RND_ROUND_HALF_UP);
 
                 SplitList* splits = xaccTransGetSplitList(trans_line->trans);
                 while (splits)
@@ -1187,7 +1187,7 @@
                 balance_offset = gnc_numeric_add(balance_offset,
                                                  amount,
                                                  xaccAccountGetCommoditySCU(account),
-                                                 GNC_HOW_RND_ROUND);
+                                                 GNC_HOW_RND_ROUND_HALF_UP);
             }
             transactions = g_list_next(transactions);
         }

Modified: gnucash/trunk/src/import-export/hbci/gnc-hbci-getbalance.c
===================================================================
--- gnucash/trunk/src/import-export/hbci/gnc-hbci-getbalance.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/hbci/gnc-hbci-getbalance.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -265,7 +265,7 @@
 
     value = double_to_gnc_numeric (booked_value,
                                    xaccAccountGetCommoditySCU(gnc_acc),
-                                   GNC_HOW_RND_ROUND);
+                                   GNC_HOW_RND_ROUND_HALF_UP);
     if ((noted_value == 0.0) && (booked_value == 0.0))
     {
         dialog = gtk_message_dialog_new(GTK_WINDOW(parent),

Modified: gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c
===================================================================
--- gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/hbci/gnc-hbci-gettrans.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -342,7 +342,7 @@
         gnc_amount = double_to_gnc_numeric
                      (d_value,
                       xaccAccountGetCommoditySCU(gnc_acc),
-                      GNC_HOW_RND_ROUND);
+                      GNC_HOW_RND_ROUND_HALF_UP);
         if (!h_value)
             g_warning("trans_list_cb: Oops, value was NULL. Using 0.\n");
         xaccSplitSetBaseValue(split, gnc_amount, xaccAccountGetCommodity(gnc_acc));

Modified: gnucash/trunk/src/import-export/hbci/gnc-hbci-transfer.c
===================================================================
--- gnucash/trunk/src/import-export/hbci/gnc-hbci-transfer.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/hbci/gnc-hbci-transfer.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -271,7 +271,7 @@
     amount = double_to_gnc_numeric
              (AB_Value_GetValue (AB_Transaction_GetValue (h_trans)),
               xaccAccountGetCommoditySCU(gnc_acc),
-              GNC_HOW_RND_ROUND);
+              GNC_HOW_RND_ROUND_HALF_UP);
     /*switch (trans_type) {
       case SINGLE_DEBITNOTE:
       gnc_xfer_dialog_set_amount (transdialog, gnc_numeric_neg (amount));

Modified: gnucash/trunk/src/import-export/ofx/gnc-ofx-import.c
===================================================================
--- gnucash/trunk/src/import-export/ofx/gnc-ofx-import.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/import-export/ofx/gnc-ofx-import.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -385,7 +385,7 @@
 
                     gnc_amount = double_to_gnc_numeric (data.amount,
                                                         gnc_commodity_get_fraction(xaccTransGetCurrency(transaction)),
-                                                        GNC_HOW_RND_ROUND);
+                                                        GNC_HOW_RND_ROUND_HALF_UP);
                     xaccSplitSetBaseValue(split, gnc_amount, xaccTransGetCurrency(transaction));
 
                     /* Also put the ofx transaction's memo in the split's memo field */
@@ -440,10 +440,10 @@
 
                             gnc_amount = double_to_gnc_numeric (ofx_get_investment_amount(data),
                                                                 gnc_commodity_get_fraction(investment_commodity),
-                                                                GNC_HOW_RND_ROUND);
+                                                                GNC_HOW_RND_ROUND_HALF_UP);
                             gnc_units = double_to_gnc_numeric (data.units,
                                                                gnc_commodity_get_fraction(investment_commodity),
-                                                               GNC_HOW_RND_ROUND);
+                                                               GNC_HOW_RND_ROUND_HALF_UP);
                             xaccSplitSetAmount(split, gnc_units);
                             xaccSplitSetValue(split, gnc_amount);
 
@@ -523,7 +523,7 @@
 
                             gnc_amount = double_to_gnc_numeric (data.amount,
                                                                 gnc_commodity_get_fraction(xaccTransGetCurrency(transaction)),
-                                                                GNC_HOW_RND_ROUND);
+                                                                GNC_HOW_RND_ROUND_HALF_UP);
                             xaccSplitSetBaseValue(split, gnc_amount, xaccTransGetCurrency(transaction));
 
                             /* Also put the ofx transaction name in the splits memo field, or ofx memo if name is unavailable */
@@ -546,7 +546,7 @@
 
                             gnc_amount = double_to_gnc_numeric (-data.amount,/*OFX_INCOME amounts come in as positive numbers*/
                                                                 gnc_commodity_get_fraction(xaccTransGetCurrency(transaction)),
-                                                                GNC_HOW_RND_ROUND);
+                                                                GNC_HOW_RND_ROUND_HALF_UP);
                             xaccSplitSetBaseValue(split, gnc_amount, xaccTransGetCurrency(transaction));
 
                             /* Also put the ofx transaction name in the splits memo field, or ofx memo if name is unavailable */
@@ -570,7 +570,7 @@
 
                             gnc_amount = double_to_gnc_numeric (-ofx_get_investment_amount(data),
                                                                 gnc_commodity_get_fraction(xaccTransGetCurrency(transaction)),
-                                                                GNC_HOW_RND_ROUND);
+                                                                GNC_HOW_RND_ROUND_HALF_UP);
                             xaccSplitSetBaseValue(split, gnc_amount, xaccTransGetCurrency(transaction));
 
                             /* Also put the ofx transaction name in the splits memo field, or ofx memo if name is unavailable */

Modified: gnucash/trunk/src/libqof/qof/qofquerycore.c
===================================================================
--- gnucash/trunk/src/libqof/qof/qofquerycore.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/libqof/qof/qofquerycore.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -475,7 +475,7 @@
             (gnc_numeric_compare (gnc_numeric_abs
                                   (gnc_numeric_sub (gnc_numeric_abs (obj_val),
                                           gnc_numeric_abs (pdata->amount),
-                                          100000, GNC_HOW_RND_ROUND)),
+                                          100000, GNC_HOW_RND_ROUND_HALF_UP)),
                                   cmp_val) < 0);
     }
     else

Modified: gnucash/trunk/src/register/ledger-core/split-register-model-save.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-model-save.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/register/ledger-core/split-register-model-save.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -440,7 +440,7 @@
             {
                 value = gnc_numeric_div(new_amount, amtconv,
                                         gnc_commodity_get_fraction(curr),
-                                        GNC_HOW_RND_ROUND);
+                                        GNC_HOW_RND_ROUND_HALF_UP);
                 xaccSplitSetValue(sd->split, value);
             }
             else
@@ -471,7 +471,7 @@
         /* convert the amount to the Value ... */
         value = gnc_numeric_div (new_amount, amtconv,
                                  gnc_commodity_get_fraction (curr),
-                                 GNC_HOW_RND_ROUND);
+                                 GNC_HOW_RND_ROUND_HALF_UP);
         xaccSplitSetValue (sd->split, value);
     }
     else
@@ -488,7 +488,7 @@
         acc = xaccSplitGetAccount (sd->split);
         new_amount = gnc_numeric_mul (value, convrate,
                                       xaccAccountGetCommoditySCU (acc),
-                                      GNC_HOW_RND_ROUND);
+                                      GNC_HOW_RND_ROUND_HALF_UP);
         xaccSplitSetAmount (sd->split, new_amount);
     }
 }
@@ -561,7 +561,7 @@
         {
             gnc_numeric amount = xaccSplitGetAmount (sd->split);
             value = gnc_numeric_div(
-                        amount, rate, gnc_commodity_get_fraction(txn_cur), GNC_HOW_RND_ROUND);
+                        amount, rate, gnc_commodity_get_fraction(txn_cur), GNC_HOW_RND_ROUND_HALF_UP);
             xaccSplitSetValue (sd->split, value);
 
             /* XXX: do we need to set the amount on the other split? */
@@ -584,7 +584,7 @@
                                                    acc);
 
             amount = gnc_numeric_mul (value, rate, xaccAccountGetCommoditySCU (acc),
-                                      GNC_HOW_RND_ROUND);
+                                      GNC_HOW_RND_ROUND_HALF_UP);
             xaccSplitSetAmount (other_split, amount);
 
         }
@@ -612,7 +612,7 @@
 
             amount = xaccSplitGetAmount (sd->split);
             value = gnc_numeric_div (amount, rate, gnc_commodity_get_fraction (txn_cur),
-                                     GNC_HOW_RND_ROUND);
+                                     GNC_HOW_RND_ROUND_HALF_UP);
             xaccSplitSetValue (sd->split, value);
 #endif
         }

Modified: gnucash/trunk/src/register/ledger-core/split-register-model.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-model.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/register/ledger-core/split-register-model.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1625,13 +1625,13 @@
             imbalance = gnc_numeric_mul (imbalance,
                                          xaccTransGetAccountConvRate(trans, acc),
                                          gnc_commodity_get_fraction (currency),
-                                         GNC_HOW_RND_ROUND);
+                                         GNC_HOW_RND_ROUND_HALF_UP);
         }
         else
         {
             imbalance = gnc_numeric_convert (imbalance,
                                              gnc_commodity_get_fraction (currency),
-                                             GNC_HOW_RND_ROUND);
+                                             GNC_HOW_RND_ROUND_HALF_UP);
         }
 
         return xaccPrintAmount (imbalance, gnc_account_print_info (acc, FALSE));

Modified: gnucash/trunk/src/register/ledger-core/split-register.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/register/ledger-core/split-register.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -1918,7 +1918,7 @@
     if (!recalc_shares &&
             !recalc_price &&
             !recalc_value &&
-            !gnc_numeric_same (value, calc_value, denom, GNC_HOW_RND_ROUND))
+            !gnc_numeric_same (value, calc_value, denom, GNC_HOW_RND_ROUND_HALF_UP))
     {
         int choice;
         int default_value;
@@ -1989,7 +1989,7 @@
 
             denom = gnc_split_get_amount_denom (split);
 
-            amount = gnc_numeric_div (value, price, denom, GNC_HOW_RND_ROUND);
+            amount = gnc_numeric_div (value, price, denom, GNC_HOW_RND_ROUND_HALF_UP);
 
             cell = gnc_table_layout_get_cell (reg->table->layout, SHRS_CELL);
             gnc_price_cell_set_value ((PriceCell *) cell, amount);
@@ -2047,7 +2047,7 @@
 
         denom = gnc_split_get_value_denom (split);
 
-        value = gnc_numeric_mul (price, amount, denom, GNC_HOW_RND_ROUND);
+        value = gnc_numeric_mul (price, amount, denom, GNC_HOW_RND_ROUND_HALF_UP);
 
         gnc_price_cell_set_debt_credit_value ((PriceCell *) debit_cell,
                                               (PriceCell *) credit_cell, value);

Modified: gnucash/trunk/src/register/register-core/pricecell.c
===================================================================
--- gnucash/trunk/src/register/register-core/pricecell.c	2010-10-23 10:00:58 UTC (rev 19694)
+++ gnucash/trunk/src/register/register-core/pricecell.c	2010-10-23 10:38:48 UTC (rev 19695)
@@ -144,7 +144,7 @@
         else if (gnc_exp_parser_parse (cell->cell.value, &amount, &err_location))
         {
             if (cell->fraction > 0)
-                amount = gnc_numeric_convert (amount, cell->fraction, GNC_HOW_RND_ROUND);
+                amount = gnc_numeric_convert (amount, cell->fraction, GNC_HOW_RND_ROUND_HALF_UP);
 
             cell->amount = amount;
         }
@@ -243,7 +243,7 @@
         return FALSE;
 
     if (cell->fraction > 0)
-        amount = gnc_numeric_convert (amount, cell->fraction, GNC_HOW_RND_ROUND);
+        amount = gnc_numeric_convert (amount, cell->fraction, GNC_HOW_RND_ROUND_HALF_UP);
 
     cell->amount = amount;
     buff = gnc_price_cell_print_value (cell);



More information about the gnucash-changes mailing list