[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