changeset 79425:8026a4be9d9c

(Fformat): When formatting an integer as float take precision into account.
author Andreas Schwab <schwab@suse.de>
date Fri, 16 Nov 2007 00:10:22 +0000
parents c83ab4ee6f0f
children 8f73cff047f4
files src/editfns.c
diffstat 1 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/editfns.c	Thu Nov 15 23:53:10 2007 +0000
+++ b/src/editfns.c	Fri Nov 16 00:10:22 2007 +0000
@@ -3596,18 +3596,23 @@
 	/* Would get MPV otherwise, since Lisp_Int's `point' to low memory.  */
 	else if (INTEGERP (args[n]) && *format != 's')
 	  {
+	    thissize = 30;
+
 	    /* The following loop assumes the Lisp type indicates
 	       the proper way to pass the argument.
 	       So make sure we have a flonum if the argument should
 	       be a double.  */
 	    if (*format == 'e' || *format == 'f' || *format == 'g')
-	      args[n] = Ffloat (args[n]);
+	      {
+		args[n] = Ffloat (args[n]);
+		if (precision[n] > 0)
+		  thissize += precision[n];
+	      }
 	    else
 	      if (*format != 'd' && *format != 'o' && *format != 'x'
 		  && *format != 'i' && *format != 'X' && *format != 'c')
 		error ("Invalid format operation %%%c", *format);
 
-	    thissize = 30;
 	    if (*format == 'c')
 	      {
 		if (! SINGLE_BYTE_CHAR_P (XINT (args[n]))