1: /*
2: * gcvt - Convert number to a string in buf. If possible, ndigit significant
3: * digits are produced, otherwise a form with an exponent is used.
4: */
5: char *ecvt();
6: char *
7: gcvt(number, ndigit, buf)
8: double number;
9: char *buf;
10: {
11: int sign, decpt;
12: register char *p1, *p2;
13: register i;
14: int junk;
15:
16: p1 = ecvt(number, ndigit, &decpt, &sign);
17: p2 = buf;
18: if (sign)
19: *p2++ = '-';
20: for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
21: ndigit--;
22: if (decpt >= 0 && decpt-ndigit > 4
23: || decpt < 0 && decpt < -3) { /* use E-style */
24: decpt--;
25: *p2++ = *p1++;
26: *p2++ = '.';
27: for (i=1; i<ndigit; i++)
28: *p2++ = *p1++;
29: *p2++ = 'e';
30: if (decpt<0) {
31: decpt = -decpt;
32: *p2++ = '-';
33: }
34: if (decpt/10 > 0)
35: *p2++ = decpt/10 + '0';
36: *p2++ = decpt%10 + '0';
37: } else {
38: if (decpt<=0) {
39: /* if (*p1!='0') */
40: *p2++ = '0';
41: *p2++ = '.';
42: while (decpt<0) {
43: decpt++;
44: *p2++ = '0';
45: }
46: }
47: for (i=1; i<=ndigit; i++) {
48: *p2++ = *p1++;
49: if (i==decpt)
50: *p2++ = '.';
51: }
52: if (ndigit<decpt) {
53: while (ndigit++<decpt)
54: *p2++ = '0';
55: *p2++ = '.';
56: }
57: }
58: if (p2[-1]=='.')
59: *p2++ = '0';
60: *p2 = '\0';
61: return(buf);
62: }
Defined functions
gcvt
defined in line
6; used 1 times