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

View File

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