That doesn't make it any better, though. The reason is this commit by srb:
revision 1.241 date: 2008/08/26 18:34:44; author: srb; state: Exp; lines: +32 -22 Fix buffer overflows when converting Pike floats to stringformat.
@@ -1609,7 +1618,8 @@ goto append_buffer;
case T_FLOAT: - sprintf(buffer,"%"PRINTPIKEFLOAT"f",sp[e].u.float_number); + sprintf(buffer,"%.*"PRINTPIKEFLOAT"g", + MAX_FLOAT_PREC_LEN, sp[e].u.float_number); #ifdef PIKE_DEBUG if (strlen (buffer) > MAX_FLOAT_SPRINTF_LEN) Pike_fatal ("Formatted float %s is %"PRINTSIZET"u, "
The intention is not bad - using the "f" specifier with a big exponent produces a very long string of digits. However, "g" happily removes all trailing zeroes, and also the decimal point if possible.