From fde56d0f1214b8fb9de5ba4d42d683ed494c45b0 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Sun, 18 Jul 2004 04:24:49 -0400 Subject: fix to european number handling --- amount.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'amount.cc') diff --git a/amount.cc b/amount.cc index 3217c698..3b6a8866 100644 --- a/amount.cc +++ b/amount.cc @@ -532,14 +532,6 @@ static commodity * parse_amount(mpz_t out, const char * num, result = pcre_copy_substring(num, ovector, matched, base + 3, buf, 255); assert(result >= 0); - // Determine the precision used - if (char * p = std::strchr(buf, '.')) - precision = std::strlen(++p); - else if (char * p = std::strchr(buf, '/')) - precision = std::strlen(++p) - 1; - else - precision = 0; - // Where "thousands" markers used? Is it a european number? if (char * p = std::strrchr(buf, ',')) { if (std::strchr(p, '.')) @@ -548,6 +540,14 @@ static commodity * parse_amount(mpz_t out, const char * num, european = true; } + // Determine the precision used + if (char * p = std::strchr(buf, european ? ',' : '.')) + precision = std::strlen(++p); + else if (char * p = std::strchr(buf, '/')) + precision = std::strlen(++p) - 1; + else + precision = 0; + // Parse the actual quantity std::string value_str = buf; -- cgit v1.2.3