diff options
Diffstat (limited to 'src/backend/utils/adt/float.c')
-rw-r--r-- | src/backend/utils/adt/float.c | 52 |
1 files changed, 6 insertions, 46 deletions
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index d1e12c14bed..c91bb1a3059 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -243,30 +243,10 @@ Datum float4out(PG_FUNCTION_ARGS) { float4 num = PG_GETARG_FLOAT4(0); - char *ascii; - - if (isnan(num)) - PG_RETURN_CSTRING(pstrdup("NaN")); - - switch (is_infinite(num)) - { - case 1: - ascii = pstrdup("Infinity"); - break; - case -1: - ascii = pstrdup("-Infinity"); - break; - default: - { - int ndig = FLT_DIG + extra_float_digits; - - if (ndig < 1) - ndig = 1; - - ascii = psprintf("%.*g", ndig, num); - } - } + char *ascii = (char *) palloc(32); + int ndig = FLT_DIG + extra_float_digits; + (void) pg_strfromd(ascii, 32, ndig, num); PG_RETURN_CSTRING(ascii); } @@ -479,30 +459,10 @@ float8out(PG_FUNCTION_ARGS) char * float8out_internal(double num) { - char *ascii; - - if (isnan(num)) - return pstrdup("NaN"); - - switch (is_infinite(num)) - { - case 1: - ascii = pstrdup("Infinity"); - break; - case -1: - ascii = pstrdup("-Infinity"); - break; - default: - { - int ndig = DBL_DIG + extra_float_digits; - - if (ndig < 1) - ndig = 1; - - ascii = psprintf("%.*g", ndig, num); - } - } + char *ascii = (char *) palloc(32); + int ndig = DBL_DIG + extra_float_digits; + (void) pg_strfromd(ascii, 32, ndig, num); return ascii; } |