mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Audit use of gnc_numeric rounding and denom specification.
Change GNC_RND to GNC_HOW_RND git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10113 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
1d7e3f3384
commit
b29c0fe21d
@ -895,7 +895,7 @@ xaccAccountInsertSplit (Account *acc, Split *split)
|
||||
* 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 @@ xaccAccountBalanceHelper (Account *account, gpointer data)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -250,7 +250,7 @@ xaccSplitScrub (Split *split)
|
||||
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 @@ xaccTransScrubImbalance (Transaction *trans, AccountGroup *root,
|
||||
* 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);
|
||||
|
||||
|
@ -94,7 +94,7 @@ xaccScrubLot (GNCLot *lot)
|
||||
GNCPolicy *pcy;
|
||||
|
||||
if (!lot) return FALSE;
|
||||
ENTER (" ");
|
||||
ENTER ("(lot=%p)", lot);
|
||||
|
||||
acc = gnc_lot_get_account (lot);
|
||||
pcy = acc->policy;
|
||||
@ -103,6 +103,7 @@ xaccScrubLot (GNCLot *lot)
|
||||
|
||||
/* 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 @@ xaccScrubLot (GNCLot *lot)
|
||||
|
||||
/* 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 */
|
||||
|
@ -674,9 +674,9 @@ DxaccSplitSetSharePriceAndAmount (Split *s, double price, double amt)
|
||||
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 @@ xaccSplitSetSharePriceAndAmount (Split *s, gnc_numeric price,
|
||||
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 @@ xaccSplitSetSharePrice (Split *s, gnc_numeric price)
|
||||
|
||||
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 @@ DxaccSplitSetShareAmount (Split *s, double damt)
|
||||
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 @@ DxaccSplitSetShareAmount (Split *s, double damt)
|
||||
{
|
||||
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 @@ xaccSplitSetAmount (Split *s, gnc_numeric amt)
|
||||
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 @@ xaccSplitSetValue (Split *s, gnc_numeric amt)
|
||||
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 @@ xaccSplitSetBaseValue (Split *s, gnc_numeric value,
|
||||
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 @@ xaccSplitsComputeValue (GList *splits, Split * skip_me,
|
||||
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 @@ xaccSplitsComputeValue (GList *splits, Split * skip_me,
|
||||
* 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 @@ xaccTransGetAccountValue (const Transaction *trans,
|
||||
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 @@ xaccTransSetCurrency (Transaction *trans, gnc_commodity *curr)
|
||||
{
|
||||
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 @@ xaccTransAppendSplit (Transaction *trans, Split *split)
|
||||
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 @@ xaccSplitGetSharePrice (const Split * split)
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
|
@ -1285,7 +1285,8 @@ gnc_scm2query_term_query_v1 (SCM query_term_scm)
|
||||
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);
|
||||
|
@ -404,13 +404,15 @@ numeric_match_predicate (gpointer object, QofParam *getter,
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user