[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Решения
            Печать денежной суммы с разделением на тысячи

pr.c:

  1 #include <locale.h>
  2 #include <stdio.h>
  3 #include <string.h>
  4
  5 char *printm(double money)
  6 {
  7     int n;
  8     char marray1[50], marray2[50], *m1, *m2;
  9     static char buf[70];
 10     struct lconv *lc;
 11
 12     lc = localeconv();
 13
 14     sprintf(marray1, "%.*f", lc->frac_digits, money);
 15     m1 = strchr(marray1, *lc->decimal_point);
 16     if (m1 != NULL) {
 17     *m1 = *lc->mon_decimal_point;
 18     n = strlen(m1);
 19     strcpy(marray2+49-n, m1);
 20     m2 = marray2+49-n;
 21     }
 22     else {
 23     m2 = marray2+49;
 24     m1 = marray1 + strlen(marray1);
 25     *m2 = '\0';
 26     }
 27
 28     for(n=0; m1 != marray1; ) {
 29     if (n == *lc->mon_grouping) {
 30         *--m2 = *lc->mon_thousands_sep;
 31         n = 1;
 32     }
 33     else
 34         n++;
 35     *--m2 = *--m1;
 36      }
 37
 38     if (lc->p_cs_precedes)
 39     if (lc->p_sep_by_space)
 40         sprintf(buf, "%s %s", lc->currency_symbol, m2);
 41     else
 42         sprintf(buf, "%s%s", lc->currency_symbol, m2);
 43     else
 44     if (lc->p_sep_by_space)
 45         sprintf(buf, "%s %s", m2, lc->currency_symbol);
 46     else
 47         sprintf(buf, "%s%s", m2, lc->currency_symbol);
 48
 49     return(buf);
 50 }