1: #if defined(LIBC_SCCS) && !defined(lint)
2: static char sccsid[] = "@(#)gcvt.c 5.2 (Berkeley) 3/9/86";
3: #endif LIBC_SCCS and not lint
4:
5: /*
6: * gcvt - Floating output conversion to
7: * minimal length string
8: */
9:
10: char *ecvt();
11:
12: char *
13: gcvt(number, ndigit, buf)
14: double number;
15: char *buf;
16: {
17: int sign, decpt;
18: register char *p1, *p2;
19: register i;
20:
21: p1 = ecvt(number, ndigit, &decpt, &sign);
22: p2 = buf;
23: if (sign)
24: *p2++ = '-';
25: for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
26: ndigit--;
27: if (decpt >= 0 && decpt-ndigit > 4
28: || decpt < 0 && decpt < -3) { /* use E-style */
29: decpt--;
30: *p2++ = *p1++;
31: *p2++ = '.';
32: for (i=1; i<ndigit; i++)
33: *p2++ = *p1++;
34: *p2++ = 'e';
35: if (decpt<0) {
36: decpt = -decpt;
37: *p2++ = '-';
38: } else
39: *p2++ = '+';
40: *p2++ = decpt/10 + '0';
41: *p2++ = decpt%10 + '0';
42: } else {
43: if (decpt<=0) {
44: if (*p1!='0')
45: *p2++ = '.';
46: while (decpt<0) {
47: decpt++;
48: *p2++ = '0';
49: }
50: }
51: for (i=1; i<=ndigit; i++) {
52: *p2++ = *p1++;
53: if (i==decpt)
54: *p2++ = '.';
55: }
56: if (ndigit<decpt) {
57: while (ndigit++<decpt)
58: *p2++ = '0';
59: *p2++ = '.';
60: }
61: }
62: if (p2[-1]=='.')
63: p2--;
64: *p2 = '\0';
65: return(buf);
66: }
Defined functions
gcvt
defined in line
12; used 2 times
Defined variables
sccsid
defined in line
2;
never used