1*48399Sbostic /*- 2*48399Sbostic * Copyright (c) 1991 The Regents of the University of California. 3*48399Sbostic * All rights reserved. 4*48399Sbostic * 5*48399Sbostic * %sccs.include.proprietary.c% 6*48399Sbostic */ 7*48399Sbostic 826553Sdonn #if defined(LIBC_SCCS) && !defined(lint) 9*48399Sbostic static char sccsid[] = "@(#)gcvt.c 5.3 (Berkeley) 04/20/91"; 10*48399Sbostic #endif /* LIBC_SCCS and not lint */ 1122089Smckusick 122012Swnj /* 132012Swnj * gcvt - Floating output conversion to 142012Swnj * minimal length string 152012Swnj */ 162012Swnj 172012Swnj char *ecvt(); 182012Swnj 192012Swnj char * 202012Swnj gcvt(number, ndigit, buf) 212012Swnj double number; 222012Swnj char *buf; 232012Swnj { 242012Swnj int sign, decpt; 252012Swnj register char *p1, *p2; 262012Swnj register i; 272012Swnj 282012Swnj p1 = ecvt(number, ndigit, &decpt, &sign); 292012Swnj p2 = buf; 302012Swnj if (sign) 312012Swnj *p2++ = '-'; 322012Swnj for (i=ndigit-1; i>0 && p1[i]=='0'; i--) 332012Swnj ndigit--; 342012Swnj if (decpt >= 0 && decpt-ndigit > 4 352012Swnj || decpt < 0 && decpt < -3) { /* use E-style */ 362012Swnj decpt--; 372012Swnj *p2++ = *p1++; 382012Swnj *p2++ = '.'; 392012Swnj for (i=1; i<ndigit; i++) 402012Swnj *p2++ = *p1++; 412012Swnj *p2++ = 'e'; 422012Swnj if (decpt<0) { 432012Swnj decpt = -decpt; 442012Swnj *p2++ = '-'; 452012Swnj } else 462012Swnj *p2++ = '+'; 472012Swnj *p2++ = decpt/10 + '0'; 482012Swnj *p2++ = decpt%10 + '0'; 492012Swnj } else { 502012Swnj if (decpt<=0) { 512012Swnj if (*p1!='0') 522012Swnj *p2++ = '.'; 532012Swnj while (decpt<0) { 542012Swnj decpt++; 552012Swnj *p2++ = '0'; 562012Swnj } 572012Swnj } 582012Swnj for (i=1; i<=ndigit; i++) { 592012Swnj *p2++ = *p1++; 602012Swnj if (i==decpt) 612012Swnj *p2++ = '.'; 622012Swnj } 632012Swnj if (ndigit<decpt) { 642012Swnj while (ndigit++<decpt) 652012Swnj *p2++ = '0'; 662012Swnj *p2++ = '.'; 672012Swnj } 682012Swnj } 692012Swnj if (p2[-1]=='.') 702012Swnj p2--; 712012Swnj *p2 = '\0'; 722012Swnj return(buf); 732012Swnj } 74