Fix rounding problems in conversions. Fixes bug #454827.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23727 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Mike Alexander 2014-01-20 05:08:47 +00:00
parent 8c68c95135
commit 0eda749c3c

View File

@ -2028,7 +2028,7 @@ gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb,
{
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 @@ gnc_pricedb_convert_balance_latest_price(GNCPriceDB *pdb,
{
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_pricedb_convert_balance_latest_price(GNCPriceDB *pdb,
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 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
{
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 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
{
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 @@ gnc_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
/* 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_pricedb_convert_balance_nearest_price(GNCPriceDB *pdb,
(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;