[<<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 }