diff options
author | John Wiegley <johnw@newartisans.com> | 2008-07-28 02:16:58 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2008-07-29 21:47:54 -0400 |
commit | 5aef1add426ca00daee5af38b27c52d7e49e3491 (patch) | |
tree | 2dff1f3405a7be97b40f23fa33e3a2c74fdc6357 | |
parent | 1bb29cdbb7fa63d2fd5312e3fc81bcc489aaab5d (diff) | |
download | fork-ledger-5aef1add426ca00daee5af38b27c52d7e49e3491.tar.gz fork-ledger-5aef1add426ca00daee5af38b27c52d7e49e3491.tar.bz2 fork-ledger-5aef1add426ca00daee5af38b27c52d7e49e3491.zip |
Merged over fix to #205 from v2.6.1b, which deals with small commodity
rounding.
-rw-r--r-- | amount.cc | 3 | ||||
-rw-r--r-- | entry.cc | 16 |
2 files changed, 11 insertions, 8 deletions
@@ -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; @@ -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; |