--- old/postgresql-7.2.1/src/backend/utils/adt/float.c Tue Dec 11 02:02:12 2001 +++ postgresql-7.2.1/src/backend/utils/adt/float.c Mon Nov 4 15:50:19 2002 @@ -65,6 +65,11 @@ #include "utils/array.h" #include "utils/builtins.h" +/* + * Configuration options for float4 and float8 extra digits in output format + */ + +int extra_float_digits; #if !(NeXT && NX_CURRENT_COMPILER_RELEASE > NX_COMPILER_RELEASE_3_2) /* NS3.3 has conflicting declarations of these in */ @@ -228,6 +233,7 @@ float4 num = PG_GETARG_FLOAT4(0); char *ascii = (char *) palloc(MAXFLOATWIDTH + 1); int infflag; + int ndig = FLT_DIG + extra_float_digits; if (isnan(num)) PG_RETURN_CSTRING(strcpy(ascii, "NaN")); @@ -237,7 +243,10 @@ if (infflag < 0) PG_RETURN_CSTRING(strcpy(ascii, "-Infinity")); - sprintf(ascii, "%.*g", FLT_DIG, num); + if (ndig < 1) + ndig = 1; + + sprintf(ascii, "%.*g", ndig, num); PG_RETURN_CSTRING(ascii); } @@ -290,6 +299,7 @@ float8 num = PG_GETARG_FLOAT8(0); char *ascii = (char *) palloc(MAXDOUBLEWIDTH + 1); int infflag; + int ndig = DBL_DIG + extra_float_digits; if (isnan(num)) PG_RETURN_CSTRING(strcpy(ascii, "NaN")); @@ -299,7 +309,10 @@ if (infflag < 0) PG_RETURN_CSTRING(strcpy(ascii, "-Infinity")); - sprintf(ascii, "%.*g", DBL_DIG, num); + if (ndig < 1) + ndig = 1; + + sprintf(ascii, "%.*g", ndig, num); PG_RETURN_CSTRING(ascii); }