diff options
-rw-r--r-- | src/print.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/print.c b/src/print.c index 4255460af9f..0b6139a5c78 100644 --- a/src/print.c +++ b/src/print.c @@ -581,11 +581,8 @@ to make it write to the debugging output.\n") #ifdef LISP_FLOAT_TYPE -void -float_to_string (buf, data) - char *buf; /* - * This buffer should be at least as large as the max string size of the + * The buffer should be at least as large as the max string size of the * largest float, printed in the biggest notation. This is undoubtably * 20d float_output_format, with the negative of the C-constant "HUGE" * from <math.h>. @@ -597,6 +594,10 @@ float_to_string (buf, data) * re-writing _doprnt to be more sane)? * -wsr */ + +void +float_to_string (buf, data) + char *buf; double data; { register unsigned char *cp, c; @@ -638,6 +639,19 @@ float_to_string (buf, data) sprintf (buf, XSTRING (Vfloat_output_format)->data, data); } + + /* Make sure there is a decimal point or an exponent, + so that the value is readable as a float. */ + for (cp = buf; *cp; cp++) + if (*cp < '0' || *cp > '9') + break; + + if (*cp == 0) + { + *cp++ = '.'; + *cp++ = '0'; + *cp++ = 0; + } } #endif /* LISP_FLOAT_TYPE */ |