summaryrefslogtreecommitdiff
path: root/src/amount.cc
diff options
context:
space:
mode:
authorAlexis Hildebrandt <afh@surryhill.net>2010-09-06 15:01:09 +0200
committerAlexis Hildebrandt <afh@surryhill.net>2012-11-10 12:02:00 +0100
commit36f87f49d86e931bb99a226cd47721219ccd6301 (patch)
tree771d4fe5bf7d0954f80d7a9edff7900b4b351152 /src/amount.cc
parente77e9d692aea5a061f6fde144a56de085b1a74c4 (diff)
downloadfork-ledger-36f87f49d86e931bb99a226cd47721219ccd6301.tar.gz
fork-ledger-36f87f49d86e931bb99a226cd47721219ccd6301.tar.bz2
fork-ledger-36f87f49d86e931bb99a226cd47721219ccd6301.zip
Add --time-colon option
The --time-colon option will display the value for a seconds based commodity as real hours and minutes. For example 8100 seconds by default will be displayed as 2.25 whereas with the --time-colon option they will be displayed as 2:15.
Diffstat (limited to 'src/amount.cc')
-rw-r--r--src/amount.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/amount.cc b/src/amount.cc
index 4e658212..671215c2 100644
--- a/src/amount.cc
+++ b/src/amount.cc
@@ -195,7 +195,10 @@ namespace {
for (const char * p = buf; *p; p++) {
if (*p == '.') {
- if (commodity_t::decimal_comma_by_default ||
+ if (commodity_t::time_colon_by_default ||
+ (comm && comm->has_flags(COMMODITY_STYLE_TIME_COLON)))
+ out << ':';
+ else if (commodity_t::decimal_comma_by_default ||
(comm && comm->has_flags(COMMODITY_STYLE_DECIMAL_COMMA)))
out << ',';
else
@@ -209,7 +212,10 @@ namespace {
out << *p;
if (integer_digits > 3 && --integer_digits % 3 == 0) {
- if (commodity_t::decimal_comma_by_default ||
+ if (commodity_t::time_colon_by_default ||
+ (comm && comm->has_flags(COMMODITY_STYLE_TIME_COLON)))
+ out << ':';
+ else if (commodity_t::decimal_comma_by_default ||
(comm && comm->has_flags(COMMODITY_STYLE_DECIMAL_COMMA)))
out << '.';
else
@@ -737,6 +743,16 @@ void amount_t::in_place_unreduce()
}
if (shifted) {
+ if ("h" == comm->symbol() && commodity_t::time_colon_by_default) {
+ amount_t floored = tmp.floored();
+ amount_t precision = tmp - floored;
+ if (precision < 0.0) {
+ precision += 1.0;
+ floored -= 1.0;
+ }
+ tmp = floored + (precision * (comm->smaller()->number() / 100.0));
+ }
+
*this = tmp;
commodity_ = comm;
}
@@ -1090,6 +1106,9 @@ bool amount_t::parse(std::istream& in, const parse_flags_t& flags)
bool decimal_comma_style
= (commodity_t::decimal_comma_by_default ||
commodity().has_flags(COMMODITY_STYLE_DECIMAL_COMMA));
+ bool time_colon_style
+ = (commodity_t::time_colon_by_default ||
+ commodity().has_flags(COMMODITY_STYLE_TIME_COLON));
new_quantity->prec = 0;