fltpr.c 1012 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* $Id$ */
  2. #ifndef NOFLOAT
  3. extern char *fcvt();
  4. extern char *ecvt();
  5. char *
  6. _pfloat(r,s,n,b)
  7. double r;
  8. register char *s;
  9. {
  10. register char *s1;
  11. int sign,dp;
  12. register int i;
  13. if (b == 0)
  14. n = 6;
  15. s1 = fcvt(r,n,&dp,&sign);
  16. if (sign)
  17. *s++ = '-';
  18. if (dp<=0)
  19. *s++ = '0';
  20. for (i=dp; i>0; i--)
  21. if (*s1) *s++ = *s1++;
  22. else *s++ = '0';
  23. if ((i=n) > 0)
  24. *s++ = '.';
  25. while (++dp <= 0) {
  26. if (--i<0)
  27. break;
  28. *s++ = '0';
  29. }
  30. while (--i >= 0)
  31. if (*s1) *s++ = *s1++;
  32. else *s++ = '0';
  33. return(s);
  34. }
  35. char *_pscien(r,s,n,b) float r; register char *s; {
  36. int sign,dp;
  37. register char *s1;
  38. if (b == 0)
  39. n = 7;
  40. else n += 1;
  41. s1 = ecvt(r,n,&dp,&sign);
  42. if (sign)
  43. *s++ = '-';
  44. *s++ = *s1++;
  45. *s++ = '.';
  46. while (--n>0)
  47. if (*s1) *s++ = *s1++;
  48. else *s++ = '0';
  49. *s++ = 'e';
  50. if ( r ) --dp ;
  51. if ( dp<0 ) {
  52. *s++ = '-' ; dp= -dp ;
  53. } else {
  54. *s++ = '+' ;
  55. }
  56. if (dp >= 100) {
  57. *s++ = '0' + (dp / 100);
  58. dp %= 100;
  59. }
  60. *s++ = '0' + (dp/10);
  61. *s++ = '0' + (dp%10);
  62. return(s);
  63. }
  64. #endif