diff options
-rw-r--r-- | Makefile | 10 | ||||
-rw-r--r-- | amount.cc | 16 |
2 files changed, 13 insertions, 13 deletions
@@ -2,11 +2,11 @@ CODE = amount.cc ledger.cc parse.cc reports.cc OBJS = $(patsubst %.cc,%.o,$(CODE)) #CXX = cc CXX = g++ -CFLAGS = -Wall -ansi -pedantic -#DFLAGS = -O3 -fomit-frame-pointer -DFLAGS = -g -DDEBUG=1 -INCS = -I/sw/include -I/usr/include/gcc/darwin/3.3/c++ -I/usr/include/gcc/darwin/3.3/c++/ppc-darwin -LIBS = -L/sw/lib -lgmpxx -lgmp -lpcre +CFLAGS = #-Wall -ansi -pedantic +DFLAGS = -O3 -fomit-frame-pointer +#DFLAGS = -g -DDEBUG=1 +INCS = -I/usr/local/include +LIBS = -L/usr/local/lib -lgmpxx -lgmp -lpcre ifdef GNUCASH CODE := $(CODE) gnucash.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; |