1 #define _GNU_SOURCE 2 #include <stdlib.h> 3 #include <stdio.h> 4 ecvt(double x,int n,int * dp,int * sign)5char *ecvt(double x, int n, int *dp, int *sign) 6 { 7 static char buf[16]; 8 char tmp[32]; 9 int i, j; 10 11 if (n-1U > 15) n = 15; 12 sprintf(tmp, "%.*e", n-1, x); 13 i = *sign = (tmp[0]=='-'); 14 for (j=0; tmp[i]!='e'; j+=(tmp[i++]!='.')) 15 buf[j] = tmp[i]; 16 buf[j] = 0; 17 *dp = atoi(tmp+i+1)+1; 18 19 return buf; 20 } 21