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 --- Makefile | 10 +++++----- amount.cc | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index cae7c23e..6ff88b8b 100644 --- a/Makefile +++ b/Makefile @@ -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 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