1: /* @(#)ecvt.c 2.1 SCCS id keyword */
2: /*
3: * ecvt converts to decimal
4: * the number of digits is specified by ndigit
5: * decpt is set to the position of the decimal point
6: * sign is set to 0 for positive, 1 for negative
7: */
8:
9: char *cvt();
10:
11: #define NDIG 80
12: char*
13: ecvt(arg, ndigits, decpt, sign)
14: double arg;
15: int ndigits, *decpt, *sign;
16: {
17: return(cvt(arg, ndigits, decpt, sign, 1));
18: }
19:
20: char*
21: fcvt(arg, ndigits, decpt, sign)
22: double arg;
23: int ndigits, *decpt, *sign;
24: {
25: return(cvt(arg, ndigits, decpt, sign, 0));
26: }
27:
28: static char*
29: cvt(arg, ndigits, decpt, sign, eflag)
30: double arg;
31: int ndigits, *decpt, *sign;
32: {
33: register int r2;
34: double fi, fj;
35: register char *p, *p1;
36: static char buf[NDIG];
37: double modf();
38:
39: if (ndigits<0)
40: ndigits = 0;
41: if (ndigits>=NDIG-1)
42: ndigits = NDIG-2;
43: r2 = 0;
44: *sign = 0;
45: p = &buf[0];
46: if (arg<0) {
47: *sign = 1;
48: arg = -arg;
49: }
50: arg = modf(arg, &fi);
51: p1 = &buf[NDIG];
52: /*
53: * Do integer part
54: */
55: if (fi != 0) {
56: p1 = &buf[NDIG];
57: while (fi != 0) {
58: fj = modf(fi/10, &fi);
59: *--p1 = (int)((fj+.03)*10) + '0';
60: r2++;
61: }
62: while (p1 < &buf[NDIG])
63: *p++ = *p1++;
64: } else if (arg > 0) {
65: while ((fj = arg*10) < 1) {
66: arg = fj;
67: r2--;
68: }
69: }
70: p1 = &buf[ndigits];
71: if (eflag==0)
72: p1 += r2;
73: *decpt = r2;
74: if (p1 < &buf[0]) {
75: buf[0] = '\0';
76: return(buf);
77: }
78: while (p<=p1 && p<&buf[NDIG]) {
79: arg *= 10;
80: arg = modf(arg, &fj);
81: *p++ = (int)fj + '0';
82: }
83: if (p1 >= &buf[NDIG]) {
84: buf[NDIG-1] = '\0';
85: return(buf);
86: }
87: p = p1;
88: *p1 += 5;
89: while (*p1 > '9') {
90: *p1 = '0';
91: if (p1>buf)
92: ++*--p1;
93: else {
94: *p1 = '1';
95: (*decpt)++;
96: if (eflag==0) {
97: if (p>buf)
98: *p = '0';
99: p++;
100: }
101: }
102: }
103: *p = '\0';
104: return(buf);
105: }
Defined functions
cvt
defined in line
28; used 3 times
ecvt
defined in line
12; used 8 times
fcvt
defined in line
20; used 5 times
Defined macros
NDIG
defined in line
11; used 9 times