optimized printing of amounts
This commit is contained in:
parent
c6b82f8359
commit
42298cefd5
3 changed files with 27 additions and 43 deletions
27
amount.cc
27
amount.cc
|
|
@ -503,33 +503,38 @@ std::ostream& operator<<(std::ostream& out, const amount_t& amt)
|
||||||
out << quotient;
|
out << quotient;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bool printed = false;
|
strings_list strs;
|
||||||
|
char buf[4];
|
||||||
|
|
||||||
mpz_t temp;
|
mpz_t temp;
|
||||||
mpz_init(temp);
|
mpz_init(temp);
|
||||||
|
|
||||||
// jww (2003-09-29): use a smarter starting value for `powers'
|
for (int powers = 0; true; powers += 3) {
|
||||||
for (int powers = 15; powers >= 0; powers -= 3) {
|
if (powers > 0) {
|
||||||
mpz_ui_pow_ui(divisor, 10, powers);
|
mpz_ui_pow_ui(divisor, 10, powers);
|
||||||
mpz_tdiv_q(temp, quotient, divisor);
|
mpz_tdiv_q(temp, quotient, divisor);
|
||||||
|
|
||||||
if (mpz_sgn(temp) == 0)
|
if (mpz_sgn(temp) == 0)
|
||||||
continue;
|
break;
|
||||||
|
mpz_tdiv_r_ui(temp, temp, 1000);
|
||||||
|
} else {
|
||||||
|
mpz_tdiv_r_ui(temp, quotient, 1000);
|
||||||
|
}
|
||||||
|
mpz_get_str(buf, 10, temp);
|
||||||
|
strs.push_back(buf);
|
||||||
|
}
|
||||||
|
|
||||||
mpz_ui_pow_ui(divisor, 10, 3);
|
bool printed = false;
|
||||||
mpz_tdiv_r(temp, temp, divisor);
|
|
||||||
|
|
||||||
|
for (strings_list::iterator i = strs.begin(); i != strs.end(); i++) {
|
||||||
if (printed) {
|
if (printed) {
|
||||||
|
out << (amt.commodity->flags & COMMODITY_STYLE_EUROPEAN ? '.' : ',');
|
||||||
out.width(3);
|
out.width(3);
|
||||||
out.fill('0');
|
out.fill('0');
|
||||||
}
|
}
|
||||||
out << temp;
|
out << *i;
|
||||||
|
|
||||||
if (powers > 0) {
|
|
||||||
out << ((amt.commodity->flags & COMMODITY_STYLE_EUROPEAN) ? '.' : ',');
|
|
||||||
printed = true;
|
printed = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
mpz_clear(temp);
|
mpz_clear(temp);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
18
balance.cc
18
balance.cc
|
|
@ -18,20 +18,6 @@ amount_t balance_t::amount(const commodity_t * commodity) const
|
||||||
return amount_t();
|
return amount_t();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
balance_t balance_t::round() const
|
|
||||||
{
|
|
||||||
balance_t temp;
|
|
||||||
|
|
||||||
for (amounts_map::const_iterator i = amounts.begin();
|
|
||||||
i != amounts.end();
|
|
||||||
i++)
|
|
||||||
temp += (*i).second.round();
|
|
||||||
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
balance_t balance_t::value(const std::time_t moment) const
|
balance_t balance_t::value(const std::time_t moment) const
|
||||||
{
|
{
|
||||||
balance_t temp;
|
balance_t temp;
|
||||||
|
|
@ -41,11 +27,7 @@ balance_t balance_t::value(const std::time_t moment) const
|
||||||
i++)
|
i++)
|
||||||
temp += (*i).second.value(moment);
|
temp += (*i).second.value(moment);
|
||||||
|
|
||||||
#if 1
|
|
||||||
return temp;
|
return temp;
|
||||||
#else
|
|
||||||
return temp.round();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void balance_t::write(std::ostream& out,
|
void balance_t::write(std::ostream& out,
|
||||||
|
|
|
||||||
|
|
@ -333,9 +333,6 @@ class balance_t
|
||||||
}
|
}
|
||||||
|
|
||||||
amount_t amount(const commodity_t * commodity = NULL) const;
|
amount_t amount(const commodity_t * commodity = NULL) const;
|
||||||
#if 0
|
|
||||||
balance_t round() const;
|
|
||||||
#endif
|
|
||||||
balance_t value(const std::time_t moment) const;
|
balance_t value(const std::time_t moment) const;
|
||||||
|
|
||||||
void write(std::ostream& out,
|
void write(std::ostream& out,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue