r23727 - gnucash/trunk/src/engine - Fix rounding problems in conversions. Fixes bug #454827.

Mike Alexander mta at code.gnucash.org
Mon Jan 20 00:08:48 EST 2014


Author: mta
Date: 2014-01-20 00:08:47 -0500 (Mon, 20 Jan 2014)
New Revision: 23727
Trac: http://svn.gnucash.org/trac/changeset/23727

Modified:
   gnucash/trunk/src/engine/gnc-pricedb.c
Log:
Fix rounding problems in conversions.  Fixes bug #454827.

Modified: gnucash/trunk/src/engine/gnc-pricedb.c
===================================================================
--- gnucash/trunk/src/engine/gnc-pricedb.c	2014-01-20 01:55:11 UTC (rev 23726)
+++ gnucash/trunk/src/engine/gnc-pricedb.c	2014-01-20 05:08:47 UTC (rev 23727)
@@ -2028,7 +2028,7 @@
     {
         balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND_HALF_UP);
+                                   GNC_HOW_RND_ROUND);
         gnc_price_unref (price);
         return balance;
     }
@@ -2041,7 +2041,7 @@
     {
         balance = gnc_numeric_div (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND_HALF_UP);
+                                   GNC_HOW_RND_ROUND);
         gnc_price_unref (price);
         return balance;
     }
@@ -2097,7 +2097,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_HALF_UP);
+                               GNC_HOW_RND_ROUND);
 
     gnc_price_list_destroy(price_list);
     return balance;
@@ -2125,7 +2125,7 @@
     {
         balance = gnc_numeric_mul (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND_HALF_UP);
+                                   GNC_HOW_RND_ROUND);
         gnc_price_unref (price);
         return balance;
     }
@@ -2138,7 +2138,7 @@
     {
         balance = gnc_numeric_div (balance, gnc_price_get_value (price),
                                    gnc_commodity_get_fraction (new_currency),
-                                   GNC_HOW_RND_ROUND_HALF_UP);
+                                   GNC_HOW_RND_ROUND);
         gnc_price_unref (price);
         return balance;
     }
@@ -2178,8 +2178,8 @@
                 /* here we need the reciprocal */
                 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_HALF_UP);
+                                                       GNC_DENOM_AUTO,
+                                                       GNC_HOW_DENOM_EXACT | GNC_HOW_RND_NEVER);
                 gnc_price_unref(currency_price);
             }
         }
@@ -2190,12 +2190,12 @@
             (gnc_numeric_zero_p(currency_price_value)));
 
     balance = gnc_numeric_mul (balance, currency_price_value,
-                               gnc_commodity_get_fraction (new_currency),
-                               GNC_HOW_RND_ROUND_HALF_UP);
+                               GNC_DENOM_AUTO,
+                               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_HALF_UP);
+                               GNC_HOW_RND_ROUND);
 
     gnc_price_list_destroy(price_list);
     return balance;



More information about the gnucash-changes mailing list