[Split.c] return price==0 instead of 1, if !split, or amt==0

This commit is contained in:
Christopher Lam 2022-01-07 16:24:03 +08:00
parent 47f2e82f8e
commit 87b0a41e9b
2 changed files with 9 additions and 9 deletions

View File

@ -1196,6 +1196,10 @@ void
xaccSplitSetSharePrice (Split *s, gnc_numeric price) xaccSplitSetSharePrice (Split *s, gnc_numeric price)
{ {
if (!s) return; if (!s) return;
if (gnc_numeric_zero_p (price))
return;
ENTER (" "); ENTER (" ");
xaccTransBeginEdit (s->parent); xaccTransBeginEdit (s->parent);
@ -1927,22 +1931,18 @@ gnc_numeric
xaccSplitGetSharePrice (const Split * split) xaccSplitGetSharePrice (const Split * split)
{ {
gnc_numeric amt, val, price; gnc_numeric amt, val, price;
if (!split) return gnc_numeric_create(1, 1); if (!split) return gnc_numeric_create(0, 1);
/* if amount == 0 and value == 0, then return 1. /* if amount == 0, return 0
* if amount == 0 and value != 0 then return 0.
* otherwise return value/amount * otherwise return value/amount
*/ */
amt = xaccSplitGetAmount(split); amt = xaccSplitGetAmount(split);
val = xaccSplitGetValue(split); val = xaccSplitGetValue(split);
if (gnc_numeric_zero_p(amt)) if (gnc_numeric_zero_p(amt))
{
if (gnc_numeric_zero_p(val))
return gnc_numeric_create(1, 1);
return gnc_numeric_create(0, 1); return gnc_numeric_create(0, 1);
}
price = gnc_numeric_div(val, amt, price = gnc_numeric_div(val, amt,
GNC_DENOM_AUTO, GNC_DENOM_AUTO,
GNC_HOW_RND_ROUND_HALF_UP); GNC_HOW_RND_ROUND_HALF_UP);

View File

@ -1669,7 +1669,7 @@ static void
test_xaccSplitGetSharePrice (Fixture *fixture, gconstpointer pData) test_xaccSplitGetSharePrice (Fixture *fixture, gconstpointer pData)
{ {
gnc_numeric result, quotient; gnc_numeric result, quotient;
gnc_numeric expected = gnc_numeric_create (1, 1); gnc_numeric expected = gnc_numeric_create (0, 1);
Split *split = fixture->split; Split *split = fixture->split;
/* Warning: this is a define in Split.c */ /* Warning: this is a define in Split.c */
char *logdomain = "gnc.engine"; char *logdomain = "gnc.engine";
@ -1699,7 +1699,7 @@ test_xaccSplitGetSharePrice (Fixture *fixture, gconstpointer pData)
g_assert_cmpint (check.hits, ==, 0); g_assert_cmpint (check.hits, ==, 0);
split->value = gnc_numeric_zero (); split->value = gnc_numeric_zero ();
expected = gnc_numeric_create (1, 1); expected = gnc_numeric_create (0, 1);
result = xaccSplitGetSharePrice (split); result = xaccSplitGetSharePrice (split);
g_assert (gnc_numeric_equal (result, expected)); g_assert (gnc_numeric_equal (result, expected));
g_assert_cmpint (check.hits, ==, 0); g_assert_cmpint (check.hits, ==, 0);