fixed printing of amounts that have a null commodity (was always precision 0)
This commit is contained in:
parent
eda733a56e
commit
fbd8fd2caf
2 changed files with 15 additions and 5 deletions
18
amount.cc
18
amount.cc
|
|
@ -541,27 +541,37 @@ std::ostream& operator<<(std::ostream& _out, const amount_t& amt)
|
||||||
// Ensure the value is rounded to the commodity's precision before
|
// Ensure the value is rounded to the commodity's precision before
|
||||||
// outputting it. NOTE: `rquotient' is used here as a temp variable!
|
// outputting it. NOTE: `rquotient' is used here as a temp variable!
|
||||||
|
|
||||||
commodity_t& commodity(amt.commodity());
|
commodity_t& commodity(amt.commodity());
|
||||||
|
unsigned short precision;
|
||||||
|
|
||||||
if (commodity.precision < amt.quantity->prec) {
|
if (commodity == *commodity_t::null_commodity) {
|
||||||
|
mpz_ui_pow_ui(divisor, 10, amt.quantity->prec);
|
||||||
|
mpz_tdiv_qr(quotient, remainder, MPZ(amt.quantity), divisor);
|
||||||
|
precision = amt.quantity->prec;
|
||||||
|
}
|
||||||
|
else if (commodity.precision < amt.quantity->prec) {
|
||||||
mpz_round(rquotient, MPZ(amt.quantity), amt.quantity->prec,
|
mpz_round(rquotient, MPZ(amt.quantity), amt.quantity->prec,
|
||||||
commodity.precision);
|
commodity.precision);
|
||||||
mpz_ui_pow_ui(divisor, 10, commodity.precision);
|
mpz_ui_pow_ui(divisor, 10, commodity.precision);
|
||||||
mpz_tdiv_qr(quotient, remainder, rquotient, divisor);
|
mpz_tdiv_qr(quotient, remainder, rquotient, divisor);
|
||||||
|
precision = commodity.precision;
|
||||||
}
|
}
|
||||||
else if (commodity.precision > amt.quantity->prec) {
|
else if (commodity.precision > amt.quantity->prec) {
|
||||||
mpz_ui_pow_ui(divisor, 10, commodity.precision - amt.quantity->prec);
|
mpz_ui_pow_ui(divisor, 10, commodity.precision - amt.quantity->prec);
|
||||||
mpz_mul(rquotient, MPZ(amt.quantity), divisor);
|
mpz_mul(rquotient, MPZ(amt.quantity), divisor);
|
||||||
mpz_ui_pow_ui(divisor, 10, commodity.precision);
|
mpz_ui_pow_ui(divisor, 10, commodity.precision);
|
||||||
mpz_tdiv_qr(quotient, remainder, rquotient, divisor);
|
mpz_tdiv_qr(quotient, remainder, rquotient, divisor);
|
||||||
|
precision = commodity.precision;
|
||||||
}
|
}
|
||||||
else if (amt.quantity->prec) {
|
else if (amt.quantity->prec) {
|
||||||
mpz_ui_pow_ui(divisor, 10, amt.quantity->prec);
|
mpz_ui_pow_ui(divisor, 10, amt.quantity->prec);
|
||||||
mpz_tdiv_qr(quotient, remainder, MPZ(amt.quantity), divisor);
|
mpz_tdiv_qr(quotient, remainder, MPZ(amt.quantity), divisor);
|
||||||
|
precision = amt.quantity->prec;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mpz_set(quotient, MPZ(amt.quantity));
|
mpz_set(quotient, MPZ(amt.quantity));
|
||||||
mpz_set_ui(remainder, 0);
|
mpz_set_ui(remainder, 0);
|
||||||
|
precision = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mpz_sgn(quotient) < 0 || mpz_sgn(remainder) < 0) {
|
if (mpz_sgn(quotient) < 0 || mpz_sgn(remainder) < 0) {
|
||||||
|
|
@ -626,10 +636,10 @@ std::ostream& operator<<(std::ostream& _out, const amount_t& amt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commodity.precision) {
|
if (precision) {
|
||||||
out << ((commodity.flags & COMMODITY_STYLE_EUROPEAN) ? ',' : '.');
|
out << ((commodity.flags & COMMODITY_STYLE_EUROPEAN) ? ',' : '.');
|
||||||
|
|
||||||
out.width(commodity.precision);
|
out.width(precision);
|
||||||
out.fill('0');
|
out.fill('0');
|
||||||
|
|
||||||
char * p = mpz_get_str(NULL, 10, rquotient);
|
char * p = mpz_get_str(NULL, 10, rquotient);
|
||||||
|
|
|
||||||
|
|
@ -525,7 +525,7 @@ OPT_BEGIN(total_expr, "T:") {
|
||||||
} OPT_END(total_expr);
|
} OPT_END(total_expr);
|
||||||
|
|
||||||
OPT_BEGIN(value_data, "j") {
|
OPT_BEGIN(value_data, "j") {
|
||||||
config.amount_expr = "S" + config.amount_expr;
|
config.amount_expr = "S" + config.amount_expr;
|
||||||
config.format_string = config.plot_value_format;
|
config.format_string = config.plot_value_format;
|
||||||
} OPT_END(value_data);
|
} OPT_END(value_data);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue