diff --git a/amount.cc b/amount.cc index d96913d3..1749013e 100644 --- a/amount.cc +++ b/amount.cc @@ -703,7 +703,8 @@ bool amount_t::is_zero() const throw_(amount_error, "Cannot determine if an uninitialized amount is zero"); if (has_commodity()) { - if (quantity->prec <= commodity().precision()) + if (quantity->prec <= commodity().precision() || + quantity->has_flags(BIGINT_KEEP_PREC)) return is_realzero(); else return round(commodity().precision()).sign() == 0; diff --git a/entry.cc b/entry.cc index 2feaa761..81dfc7df 100644 --- a/entry.cc +++ b/entry.cc @@ -311,14 +311,16 @@ bool entry_base_t::finalize() // (item-position-end-line (entry-position entry)) // (format-value balance :width 20))) - if (! balance.is_null() && ! balance.is_zero()) { - error * err = - new balance_error("Entry does not balance", - new entry_context(*this, "While balancing entry:")); + if (! balance.is_null()) { balance.round(); - err->context.push_front - (new value_context(balance, "Unbalanced remainder is:")); - throw err; + if (! balance.is_zero()) { + error * err = + new balance_error("Entry does not balance", + new entry_context(*this, "While balancing entry:")); + err->context.push_front + (new value_context(balance, "Unbalanced remainder is:")); + throw err; + } } return true;