diff options
-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; |