diff options
author | John Wiegley <johnw@newartisans.com> | 2008-07-28 02:04:29 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-07-28 02:04:29 -0400 |
commit | dede5e71bf562f43000bc88bad67688fb88f841e (patch) | |
tree | 52f79ea845380f2ed3c27147b908bdde63de531e | |
parent | c93175183e790cf7f1100dfd554197161a69e6fe (diff) | |
download | fork-ledger-dede5e71bf562f43000bc88bad67688fb88f841e.tar.gz fork-ledger-dede5e71bf562f43000bc88bad67688fb88f841e.tar.bz2 fork-ledger-dede5e71bf562f43000bc88bad67688fb88f841e.zip |
Corrected a bad rounding bug that affecting very small commodity entries.
-rw-r--r-- | amount.cc | 8 | ||||
-rw-r--r-- | journal.cc | 3 |
2 files changed, 5 insertions, 6 deletions
@@ -548,14 +548,12 @@ amount_t::operator bool() const if (! quantity) return false; - if (quantity->prec <= commodity().precision()) { + if (quantity->prec <= commodity().precision() || + (quantity->flags & BIGINT_KEEP_PREC)) { return mpz_sgn(MPZ(quantity)) != 0; } else { mpz_set(temp, MPZ(quantity)); - if (quantity->flags & BIGINT_KEEP_PREC) - mpz_ui_pow_ui(divisor, 10, quantity->prec); - else - mpz_ui_pow_ui(divisor, 10, quantity->prec - commodity().precision()); + mpz_ui_pow_ui(divisor, 10, quantity->prec - commodity().precision()); mpz_tdiv_q(temp, temp, divisor); bool zero = mpz_sgn(temp) == 0; return ! zero; @@ -259,13 +259,14 @@ bool entry_base_t::finalize() } } + balance.round(); + if (balance) { error * err = new balance_error("Entry does not balance", new entry_context(*this, "While balancing entry:")); DEBUG_PRINT("ledger.journal.unbalanced_remainder", "balance = " << balance); - balance.round(); err->context.push_front (new value_context(balance, "Unbalanced remainder is:")); throw err; |