mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Fix gnc_numeric_invert to correctly handle negative values.
This commit is contained in:
parent
c068397633
commit
86320a4d11
@ -1154,9 +1154,21 @@ gnc_numeric_invert(gnc_numeric num)
|
||||
{
|
||||
if (num.num == 0)
|
||||
return gnc_numeric_zero();
|
||||
return gnc_numeric_create (num.denom, num.num);
|
||||
if (num.denom > 0)
|
||||
{
|
||||
if (num.num < 0)
|
||||
return gnc_numeric_create (-num.denom, -num.num);
|
||||
return gnc_numeric_create (num.denom, num.num);
|
||||
}
|
||||
else /* Negative denominator means multiply instead of divide. */
|
||||
{
|
||||
int64_t mult = (num.num < 0 ? INT64_C(-1) : INT64_C(1));
|
||||
qofint128 denom = mult128(-num.denom, mult * num.num);
|
||||
if (denom.hi)
|
||||
return gnc_numeric_error(GNC_ERROR_OVERFLOW);
|
||||
return gnc_numeric_create (mult, denom.lo);
|
||||
}
|
||||
}
|
||||
|
||||
/* *******************************************************************
|
||||
* double_to_gnc_numeric
|
||||
********************************************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user