diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index cd4fc6af09..73d55c5b54 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -13,7 +13,7 @@ * this version handles 64 bit numbers and so can hold values up to * $92,233,720,368,547,758.07. * - * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.80 2008/06/09 19:58:39 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/cash.c,v 1.81 2009/06/10 16:31:32 tgl Exp $ */ #include "postgres.h" @@ -191,23 +191,21 @@ cash_in(PG_FUNCTION_ARGS) for (;; s++) { - /* we look for digits as int8 as we have less */ + /* we look for digits as long as we have found less */ /* than the required number of decimal places */ - if (isdigit((unsigned char) *s) && dec < fpoint) + if (isdigit((unsigned char) *s) && (!seen_dot || dec < fpoint)) { - value = (value * 10) + *s - '0'; + value = (value * 10) + (*s - '0'); if (seen_dot) dec++; - } /* decimal point? then start counting fractions... */ else if (*s == dsymbol && !seen_dot) { seen_dot = 1; - } - /* not "thousands" separator? */ + /* ignore if "thousands" separator, else we're done */ else if (*s != ssymbol) { /* round off */ @@ -236,7 +234,7 @@ cash_in(PG_FUNCTION_ARGS) result = value * sgn; #ifdef CASHDEBUG - printf("cashin- result is %d\n", result); + printf("cashin- result is " INT64_FORMAT "\n", result); #endif PG_RETURN_CASH(result);