fltpr.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * floatpr.c - print floating point numbers
  3. */
  4. /* $Header$ */
  5. #ifndef NOFLOAT
  6. #include "loc_incl.h"
  7. char *
  8. _pfloat(long double r, register char *s, int n, int flags)
  9. {
  10. register char *s1;
  11. int sign, dp;
  12. register int i;
  13. s1 = fcvt(r, n, &dp, &sign);
  14. if (sign)
  15. *s++ = '-';
  16. else if (flags & FL_SIGN)
  17. *s++ = '+';
  18. else if (flags & FL_SPACE)
  19. *s++ = ' ';
  20. if (dp<=0)
  21. *s++ = '0';
  22. for (i=dp; i>0; i--)
  23. if (*s1) *s++ = *s1++;
  24. else *s++ = '0';
  25. if (((i=n) > 0) || (flags & FL_ALT))
  26. *s++ = '.';
  27. while (++dp <= 0) {
  28. if (--i<0)
  29. break;
  30. *s++ = '0';
  31. }
  32. while (--i >= 0)
  33. if (*s1) *s++ = *s1++;
  34. else *s++ = '0';
  35. return s;
  36. }
  37. char *
  38. _pscien(long double r, register char *s, int n, int flags)
  39. {
  40. int sign, dp;
  41. register char *s1;
  42. s1 = ecvt(r, n + 1, &dp, &sign);
  43. if (sign)
  44. *s++ = '-';
  45. else if (flags & FL_SIGN)
  46. *s++ = '+';
  47. else if (flags & FL_SPACE)
  48. *s++ = ' ';
  49. *s++ = *s1++;
  50. if ((n > 0) || (flags & FL_ALT))
  51. *s++ = '.';
  52. while (--n >= 0)
  53. if (*s1) *s++ = *s1++;
  54. else *s++ = '0';
  55. *s++ = 'e';
  56. if ( r != 0 ) --dp ;
  57. if ( dp<0 ) {
  58. *s++ = '-' ; dp= -dp ;
  59. } else {
  60. *s++ = '+' ;
  61. }
  62. if (dp >= 100) {
  63. *s++ = '0' + (dp / 100);
  64. dp %= 100;
  65. }
  66. *s++ = '0' + (dp/10);
  67. *s++ = '0' + (dp%10);
  68. return s;
  69. }
  70. #endif /* NOFLOAT */